フリープログラマー日記

iOS,アンドロイド開発を気ままにしながら生きてるおじさんのブログです。

第9回 進捗(しんちょく)状況

忙しさもあったんだけど、ちょっと壁にぶち当たっているというのも本当のところで。

たまには、こういう、トラブっているところも報告していいんじゃないかと思っています。

swiftへの移植作業を進めているのですが、現在、こんな画面に。

f:id:momonga117:20180511213446p:plain

横の2本線は、スクリーショットの比較のため引いたものです。

問題は同じ数字(座標)を使っても、文字は同じ位置に表示されないという現象。

swiftは書きたいポイントの右下側に文字が描かれ、Androidは右上側に描かれると言う事。

Androidは左上側に描く方法があるが、swiftにはないみたいだ。

ちなみにswiftのコードです。

文字は nsstr.draw(at: [場所] , withAttributes:[属性]) を使っています。

素直に UILabel使って書いたほうがいいような気もする・・・

結論は次回に持ち越しです。



    override func draw(_ rect: CGRect) {

       /*一部省略*/
 
        let upper: CGFloat = viewHeight/2 - viewWidth*0.32
        let lower: CGFloat = viewHeight/2 + viewWidth*0.38
        
        menuBigChar(string: "Entry", width: viewWidth, y: upper, position: 0)
        menuBigChar(string: "Run", width: viewWidth, y: lower, position: 0)
  
    }
    
    
    func menuBigChar(string: String,width: CGFloat, y: CGFloat , position: Int) {
    
        // この関数は緑色の文字を大きめのサイズで右に傾けた表示をするように特化しています。
        // 引数は、表示文字、画面幅、上下位置(y座標)、ポシション(左0、右1)
    
        let charSize: CGFloat = width * 0.1   // サイズは横幅の10%くらい
        
        var textbaseline: CGPoint
    
        if position == 1 {
            // 画面右寄せ
            textbaseline = CGPoint(x: width*0.95, y: y)
        } else {
            // 画面左寄せ
            textbaseline = CGPoint(x: width*0.05, y: y)
        }
    
        // 文字属性(色、フォント、サイズ、寄せ方、傾き)
        let stringAttributes: [NSAttributedStringKey : Any] = [
            NSAttributedStringKey.foregroundColor : UIColor.green,
            NSAttributedStringKey.font : UIFont.italicSystemFont(ofSize: charSize)
        ]
        
        // stringの描画(NSStringに変換してdrawメソッドを使う)
        let nsstr = string as NSString
        nsstr.draw(at: textbaseline, withAttributes: stringAttributes)
        
    }