1

UIButtonにアニメーションを追加する必要があります-単純な移動アニメーション。これを行うと、ボタンは移動しますが、そのボタンのクリック領域は古い位置のままです。

UIButton *slideButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[slideButton addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];
[slideButton setFrame:CGRectMake(50, 50, 50, 50)];
[self.view addSubview:slideButton];

CABasicAnimation *slideAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
[slideAnimation setRemovedOnCompletion:NO];
[slideAnimation setDuration:1];
[slideAnimation setFillMode:kCAFillModeBoth];
[slideAnimation setAutoreverses:NO];

slideAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(50, 50)];
slideAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
[slideButton.layer addAnimation:slideAnimation forKey:@"slide"];

アニメーションの最後でボタンのフレームを変更する答えをすでに見ました(ここのように、UIButtonはCABasicAnimatonの後に間違った位置でtouchEventsを受け取ります)が、ユーザーがボタンをクリックする可能性を与える必要があるため、私の場合ではありません移動しています...また、オブジェクトを移動するための複雑なパスがあるため、CABasicAnimationの代わりに別のアプローチ(NSTimerなど)を使用することはできません...

ご協力いただきありがとうございます!

4

1 に答える 1

0

そうですね、CABasicAnimationとは関係がないことがわかりました。Cozアニメーションサイクルは、ビュー内のレイヤーオブジェクトをアニメーション化しますが、CABasicAnimationオブジェクトに設定されているプロパティに関係なく、ビュー自体は変更できません。

数時間グーグルした後、MICHAEL TYSONによって開発されたクールな機能を見つけました:http: //atastypixel.com/blog/key-path-based-property-animation/

私はそれを少し改善しました-追加:autoreverse、repeatCount、cumulative、timeOffset、byValue ..そして出来上がり!ほぼ同じCABasicAnimation-ただし、フレームをアニメーション化できます!

于 2012-12-20T15:14:03.757 に答える