0

コア アニメーションを使用して UiView を適切にアニメーション化するのに少し問題があります。これが私のコードです:

CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"position"];
[animation setFromValue:[NSValue valueWithCGPoint:self.view.layer.position]];
[animation setToValue:[NSValue valueWithCGPoint:CGPointMake(250, self.view.layer.position.y)]]; //I want to move my UIView 250 pts to the right
[animation setDuration:1];
[animation setDelegate:self]; //where self is the view controller of the view I want to animate
[animation setRemovedOnCompletion:NO];
[self.view.layer addAnimation:animation forKey:@"toggleMenu"]; //where self.view returns the view I want to animate

次のデリゲート メソッドも実装しました。

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
    if(flag)
        [self.view.layer setTransform:CATransform3DMakeTranslation(250, 0, 0)]; //set layer to its final position
}

UIView が右に 250 ポイント移動するようにしようとしています。ただし、アニメーションがトリガーされると、ビューが動き始めますが、ビューが右に 250 ポイント移動する前にアニメーションが終了するように見えるため、UIView が最終位置に「テレポート」します。何がこの動作を引き起こしているのか理解できないようです。

UIView メソッドも使用してみましたが+(void)animateWithDuration:animations:、このアプローチは完全に機能します。setTimingFunction:functionWithControlPoints:ただし、微妙な「バウンス」効果を達成しようとしており、複数のコールバックを使用するのではなく、メソッドを使用してそれを達成したいと考えています。

どんな助けや提案も大歓迎です。

4

3 に答える 3

0
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"position"];
[animation setFromValue:[NSValue valueWithCGPoint:view.layer.position]];
CGPoint newPosition = CGPointMake(200, 300);
view.layer.position = p;
[animation setDuration:0.5f];
[animation setRemovedOnCompletion:NO];
[group setFillMode:kCAFillModeForwards];
[[view layer] addAnimation:animation forKey:@"position"];
于 2015-08-13T12:43:31.157 に答える