0

iOS のメール アプリで、受信トレイに移動してアイテムをスワイプすると、アーカイブ ボタンが右から左に表示されます (そして、それが消えたときの回避策)。私は自分のアプリでこの動作を取得しようとしています。これにアプローチした方法は、ボタンのマスクレイヤーをアニメーション化し、右から左に移動することです。ここでの問題は、アニメーションが終了するとボタンが消えることです。

//Create Mask Layer
CALayer *maskLayer = [CALayer layer];
maskLayer.frame = CGRectMake(cell.deleteButton.frame.size.width,0,cell.deleteButton.frame.size.width,cell.deleteButton.frame.size.height);
maskLayer.backgroundColor = [UIColor whiteColor].CGColor;

cell.deleteButton.layer.mask = maskLayer;

// Setting the animation
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.x"];
animation.byValue = [NSNumber numberWithFloat:-cell.deleteButton.frame.size.width];
animation.duration = 0.4f;

[cell.deleteButton.layer.mask addAnimation:animation forKey:@"maskAnimation"];

アニメーションの後にボタンが消えないようにする方法や、アニメーションを作成するためのより良い方法があるかどうか疑問に思います。

4

1 に答える 1

1

あなたの実装では、アニメーションが完了した後にマスクをアニメーションでシフトしています。マスクの最後の位置が保持されます。そのため、ボタンが非表示になっています。

クラスにデリゲートを設定する必要があります。

animation.delegate = self;

次に、デリゲート メソッドに次のコードを実装します。

 -(void) animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
 {
     CALayer *maskLayer = [CALayer layer];
     maskLayer.frame = CGRectMake(0,0,self.btnLogin.frame.size.width,
          self.btnLogin.frame.size.height);
     maskLayer.backgroundColor = [UIColor whiteColor].CGColor;

     self.btnLogin.layer.mask = maskLayer;
 }

それが役に立てば幸い。

于 2013-04-23T08:29:34.090 に答える