2016-07-29 6 views
1

私はswiftでカスタムビューでいくつかの文字列を描画しようとしています。私はその結果のJavaとAndroid上で同じことをやって、ここにいています:スウィフトとスウィフトでテキストを回転

Android Sample

を、私はこのグラフィックを取得:

enter image description here

ここに私のコードです:

let π:CGFloat = CGFloat(M_PI) 

extension NSString { 
    func drawWithBasePoint(basePoint: CGPoint, andAngle angle: CGFloat, andAttributes attributes: [String: AnyObject]) { 
     let textSize: CGSize = self.sizeWithAttributes(attributes) 
     let context: CGContextRef = UIGraphicsGetCurrentContext()! 
     let t: CGAffineTransform = CGAffineTransformMakeTranslation(basePoint.x, basePoint.y) 
     let r: CGAffineTransform = CGAffineTransformMakeRotation(angle) 
     CGContextConcatCTM(context, t) 
     CGContextConcatCTM(context, r) 
     self.drawAtPoint(CGPointMake(textSize.width/2, -textSize.height/2), withAttributes: attributes) 
     CGContextConcatCTM(context, CGAffineTransformInvert(r)) 
     CGContextConcatCTM(context, CGAffineTransformInvert(t)) 
    } 
} 

override func drawRect(rect: CGRect) { 
     elements = delegate!.getRotaryElements(self) 
     let center = CGPoint(x:bounds.width/2, y: bounds.height/2) 
     let sectorSize = 2 * π/CGFloat.init(elements.count) 
     let paragraphStyle = NSMutableParagraphStyle() 
     paragraphStyle.alignment = NSTextAlignment.Center 
     for i in 0...elements.count - 1 { 
      let attrs = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Thin", size: 14)!, NSParagraphStyleAttributeName: paragraphStyle, NSForegroundColorAttributeName:(i % 2 == 0 ? UIColor.redColor():primaryColor)] 
      elements[i].drawWithBasePoint(center, andAngle: CGFloat(i) * sectorSize + (sectorSize/2), andAttributes: attrs) 
     } 
    } 

私は同じことをSwiftでどうやって作ることができますか?私はSwift(そしてその点ではiOS)の新人です。あなたが私に与えることができるヒントを感謝します。

+0

あなたの 'drawWithBasePint'メソッドはどのように見えますか? iOS SDKからのものではありません。 – Fujia

+0

@Fujia申し訳ありません。私はそれを含めることを忘れていた。 –

答えて

2

下記のコードを試して、動作するか確認してください。

let π:CGFloat = CGFloat(M_PI) 

extension NSString { 
    func drawWithBasePoint(basePoint: CGPoint, andAngle angle: CGFloat, andAttributes attributes: [String: AnyObject]) { 
     let radius: CGFloat = 100 
     let textSize: CGSize = self.sizeWithAttributes(attributes) 
     let context: CGContextRef = UIGraphicsGetCurrentContext()! 
     let t: CGAffineTransform = CGAffineTransformMakeTranslation(basePoint.x, basePoint.y) 
     let r: CGAffineTransform = CGAffineTransformMakeRotation(angle) 
     CGContextConcatCTM(context, t) 
     CGContextConcatCTM(context, r) 
     self.drawAtPoint(CGPointMake(radius-textSize.width/2, -textSize.height/2), withAttributes: attributes) 
     CGContextConcatCTM(context, CGAffineTransformInvert(r)) 
     CGContextConcatCTM(context, CGAffineTransformInvert(t)) 
    } 
} 
関連する問題