iOS-CADisplayLink& CAShapeLayer&UIBezierPath
2394 ワード
CADisplayLink&CAShapeLayer&UIBezierPathで波のアニメーションを実現
1、CADisplayLink
CADisplayLinkはタイマーのようなもので、数ミリ秒ごとに画面をリフレッシュします.画面のリフレッシュ頻度と同じ周波数で、画面に描かれた内容をリフレッシュすることができます.CADisplayLinkの初期化:
CADisplayLinkがrunloopに登録されると、画面がリフレッシュされると、その上にバインドされたtargetが所有するselectorメソッドが呼び出されます.CADisplayLinkの実行を停止するのは簡単で、invalidateメソッドを呼び出すだけです.
NSTimerとCADisplayLinkの違いは何ですか?iOSデバイスの画面は毎秒60回リフレッシュされます.通常、CADisplayLinkは画面がリフレッシュされるたびに呼び出されます.精度が非常に高く、CADisplayLinkの使用場面は比較的ユニークで、アニメーションの連続描画など、UIの再描画に適しています.NSTimerの使用範囲は広く、CADisplayLinkよりも精度が低い単一またはループでタスクを処理できます.
2、UIBezierPath
Bezier Pathオブジェクトを作成します.使用方法moveToPoint:初期線分の始点を設定します.lineまたはcurveを追加して、1つまたは複数のsubpathを定義します.UIBezierPathオブジェクトの図面関連プロパティを変更します.
3、CAShapeLayer
CAShapeLayerはbitmapではなくベクトルパターンによって描画されるレイヤーサブクラスである.CAShapeLayerは、CGPathで表されるすべての形状を描くために使用できます.UIBezierPathで任意のパスを作成することができます.CAShapeLayerのプロパティpathを使用して、UIBezierPathで作成したパスと組み合わせて、私たちが望む形状を表示することができます.
http://www.cocoachina.com/ios/20161202/18252.html
1、CADisplayLink
CADisplayLinkはタイマーのようなもので、数ミリ秒ごとに画面をリフレッシュします.画面のリフレッシュ頻度と同じ周波数で、画面に描かれた内容をリフレッシュすることができます.CADisplayLinkの初期化:
_displayLink = [CADisplayLink displayLinkWithTarget:self
selector:@selector(updateContent:)];
[_displayLink addToRunLoop:[NSRunLoop currentRunLoop]
forMode:NSRunLoopCommonModes];
CADisplayLinkがrunloopに登録されると、画面がリフレッシュされると、その上にバインドされたtargetが所有するselectorメソッドが呼び出されます.CADisplayLinkの実行を停止するのは簡単で、invalidateメソッドを呼び出すだけです.
NSTimerとCADisplayLinkの違いは何ですか?iOSデバイスの画面は毎秒60回リフレッシュされます.通常、CADisplayLinkは画面がリフレッシュされるたびに呼び出されます.精度が非常に高く、CADisplayLinkの使用場面は比較的ユニークで、アニメーションの連続描画など、UIの再描画に適しています.NSTimerの使用範囲は広く、CADisplayLinkよりも精度が低い単一またはループでタスクを処理できます.
2、UIBezierPath
Bezier Pathオブジェクトを作成します.使用方法moveToPoint:初期線分の始点を設定します.lineまたはcurveを追加して、1つまたは複数のsubpathを定義します.UIBezierPathオブジェクトの図面関連プロパティを変更します.
3、CAShapeLayer
CAShapeLayerはbitmapではなくベクトルパターンによって描画されるレイヤーサブクラスである.CAShapeLayerは、CGPathで表されるすべての形状を描くために使用できます.UIBezierPathで任意のパスを作成することができます.CAShapeLayerのプロパティpathを使用して、UIBezierPathで作成したパスと組み合わせて、私たちが望む形状を表示することができます.
demo,
- (void)viewDidLoad {
[super viewDidLoad];
UIBezierPath *path = [[UIBezierPath alloc] init];
[path moveToPoint:CGPointMake(175, 100)];
[path addArcWithCenter:CGPointMake(150, 100) radius:25 startAngle:0 endAngle:2*M_PI clockwise:YES];
[path moveToPoint:CGPointMake(150, 125)];
[path addLineToPoint:CGPointMake(150, 175)];
[path addLineToPoint:CGPointMake(125, 225)];
[path moveToPoint:CGPointMake(150, 175)];
[path addLineToPoint:CGPointMake(175, 225)];
[path moveToPoint:CGPointMake(100, 150)];
[path addLineToPoint:CGPointMake(200, 150)];
//create shape layer
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.strokeColor = [UIColor colorWithRed:147/255.0 green:231/255.0 blue:182/255.0 alpha:1].CGColor;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
shapeLayer.lineWidth = 5;
shapeLayer.lineJoin = kCALineJoinRound;
shapeLayer.lineCap = kCALineCapRound;
shapeLayer.path = path.CGPath;
//add it to our view
[self.view.layer addSublayer:shapeLayer];
}
http://www.cocoachina.com/ios/20161202/18252.html