iOS按钮动画就像邮件应用程序

时间:2013-04-23 08:00:59

标签: ios objective-c core-animation calayer

在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"];

所以我想知道如何在动画之后让按钮不消失,或者是否有更好的方法来创建动画。

1 个答案:

答案 0 :(得分: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;
 }
希望它有所帮助。