动画:如何在视图加载时使UIbutton从右到左移动?

17

到目前为止,我在iPhone开发方面还没有做过任何动画相关的工作。

有人能帮我学习如何在视图加载时使UIbutton从右边移动到左边吗?

我想要实现这样的效果:当视图加载时,按钮从右端出现并向左移动,最终停留在它原本的位置。这种效果可行吗?

对于这个动画方面的帮助将不胜感激。如果有示例,请提供。

提前谢谢。

4个回答

32

为了让它更加流畅,我建议不要改变UIView的frame而是改变它的中心点。

CGPoint newLeftCenter = CGPointMake( 20.0f + myButton.frame.size.width / 2.0f, myButton.center.y);
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0f];
myButton.center = newLeftCenter;
[UIView commitAnimations];

3
在你的viewDidAppear:(BOOL)animated方法中,你可以在动画块内更改按钮的frame。这样你就能看到你想要的效果了。查看UIView类参考文档中关于动画的部分。最简单的动画块代码如下(抱歉,我现在没有mac,所以复制和粘贴后可能无法正常工作):
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0f];
[myButton setFrame:newFrame];
[UIView commitAnimations];

1

从上到下的动画

CATransition *animation = [CATransition animation];
[animation setDuration:0.4];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromBottom];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[[TopButton layer] addAnimation:animation forKey:@"SwitchToDown"];

1

/* 常见的转场子类型。*/

kCATransitionFromRight(从右侧转场)

kCATransitionFromLeft(从左侧转场)

kCATransitionFromTop(从顶部转场)

kCATransitionFromBottom(从底部转场)

Swift:

    let transition1: CATransition = CATransition()
    let timeFunc1 : CAMediaTimingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition1.duration = 1.0
    transition1.timingFunction = timeFunc1
    transition1.type = kCATransitionPush
    transition1.subtype = kCATransitionFromRight
    self.yourBtnORViewRef.layer.addAnimation(transition1, forKey: kCATransition)

Objective-C

CATransition *animation = [CATransition animation];
[animation setDuration:1.0];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[[self.yourBtnORViewRef layer] addAnimation:animation forKey:@"SwitchToRight"];

Swift 5:

//Animate Your Button From Left to Right
    let transition1: CATransition = CATransition()
    let timeFunc1 : CAMediaTimingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
    transition1.duration = 1.5
    transition1.timingFunction = timeFunc1
    transition1.type = CATransitionType.push
    transition1.subtype = CATransitionSubtype.fromLeft
    self.yourBtnRef.layer.add(transition1, forKey: kCATransition)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接