iOS-CADisplayLink& CAShapeLayer&UIBezierPath

2394 ワード

CADisplayLink&CAShapeLayer&UIBezierPathで波のアニメーションを実現
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