1

(関数CircleView : UIViewを介して)触れるとアニメーション化(縮小および拡大)するクラスがあります。popまた、触れたときに(基本的な水の波紋のように)ストロークされた円が表示されて成長することも望んでいます。(私が話している効果はCSS でここに示されています)

どうすればこれを行うことができますか?

いくつかの詳細情報:

  • CircleView両方のアニメーションを単一のクラスから制御できることが理想的です
  • CircleView継承するUIView

アップデート

回答に基づいて、 を介して新しいオブジェクトを追加しましたsubLayer。これは問題なく表示されますが、実行中にアニメーション化されませんpop。誰かが理由を理解するのを手伝ってくれますか?

これが私の現在のコードです(とにかく関連するビット)

- (void)layoutSubviews
{
    [self setLayerProperties];
}

- (void)setLayerProperties {
//The view’s Core Animation layer used for rendering.
CAShapeLayer *layer = (CAShapeLayer *)self.layer;

UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)
                                                  byRoundingCorners:UIRectCornerAllCorners
                                                        cornerRadii:self.frame.size];
layer.path = bezierPath.CGPath;
layer.fillColor = _Color.CGColor;

rippleLayer = [[CALayer alloc] init];
layer.path = bezierPath.CGPath;
layer.strokeColor = [UIColor blueColor].CGColor;
[layer addSublayer:rippleLayer];
}

// Does the animated "pop"
- (void)pop{

    CABasicAnimation *animation = [self animationWithKeyPath:@"transform.scale"];
    [animation setFromValue:[NSNumber numberWithFloat:1.0f]];
    [animation setToValue:[NSNumber numberWithFloat:0.8f]];
    [animation setRemovedOnCompletion:YES];
    [animation setDuration:0.15];
    [animation setAutoreverses:YES];

    [self.layer addAnimation:animation forKey:animation.keyPath];

    rippleLayer.anchorPoint = CGPointMake(1, 1);
    CABasicAnimation *scale = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    [scale setFromValue:[NSNumber numberWithFloat:1.0f]];
    [scale setToValue:[NSNumber numberWithFloat:2.0f]];
    [scale setRepeatCount:1];
    [scale setDuration:1.0f];
    //r[scale setRemovedOnCompletion:YES];
    [scale setFillMode:kCAFillModeForwards];

    [rippleLayer addAnimation:scale forKey:scale.keyPath];
}
4

1 に答える 1

0

アニメートしたい他のオブジェクトをレイヤーに追加し、アルファを 0.0 に設定するだけです。その後、アニメーションの中または直前にその値で遊ぶことができます。

小さいイニシャルで変数を命名する慣習に従っていないことに気付きました。_colorよりも好ましいでしょう_Color

また、レイヤーを元の状態に戻したい場合は、通常、識別変換マトリックスを使用します。

self.transform = CGAffineTransformIdentity;
于 2013-11-10T18:29:10.207 に答える