LoginSignup
20
19

More than 5 years have passed since last update.

SwiftでCoreGraphicsを使うときにちょっとハマった型変換

Last updated at Posted at 2014-11-17

DoubleとCGFloat

CoreGraphicsで定義されている変数やメソッドはCGFloatを利用することが多いので注意が必要になります。

ラジアンと度数の変換によく利用するM_PIなどの定数はDouble型で定義されているので、利用する際にCGFloatにする場合にはコンバージョンが必要になります。

let endAngle:CGFloat =  CGFloat(2.0 * M_PI)

またObjective-Cで以下のように書いていた場合も、Swiftに移植する場合はfloorfではなくfloorを使いDoubleからCGFloatにコンバージョンするのが良さそうです。

_timerElementRect = CGRectInset(self.bounds, floorf(0.18 * frame.size.width),  floorf(0.18 * frame.size.height))

Objective-Cではfloorfを使っていますが、SwiftではDouble型を引数にしているfloorやceilを利用したほうが便利です。

self.timerElementRect = CGRectInset(self.bounds, CGFloat(floor(0.18 * frame.size.width)),  CGFloat(floor(0.18 * frame.size.height)))

UIColorとCGColor

CAShapeLayerのfillColorプロパティはCGColorにする必要があるので、下記のようにします。

self.minorShapeLayer.fillColor = [[UIColor clearColor] CGColor];
[UIColor-Hex-Swift](https://github.com/yeahdongcn/UIColor-Hex-Swift)を利用すると下記のようになります。

Objective-Cと同様に、UIColorからCGColorに変換できます。

self.minorShapeLayer.fillColor = UIColor.clearColor().CGColor
20
19
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
19