如何在iPhone上使视图从左到右动画?

5
如何实现视图从左到右的动画过渡(类似于推送视图)。当我点击按钮时,视图应该从左侧向右侧过渡。请指导我并提供一些示例链接。
谢谢。
4个回答

3
假设你想从右侧推出view2来替换view1。
// Set up view2
view2.frame = view1.frame;
view2.center = CGPointMake(view1.center.x + CGRectGetWidth(view1.frame), view1.center.y);
[view1.superview addSubview: view2];
// Animate the push
[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDelegate: self];
[UIView setAnimationDidStopSelector: @selector(pushAnimationDidStop:finished:context:)];
view2.center = view1.center;
view1.center = CGPointMake(view1.center.x - CGRectGetWidth(view1.frame), view1.center.y);
[UIView commitAnimations];

接着(可选),实现此方法以将view1从视图层次结构中移除:

- (void) pushAnimationDidStop: (NSString *) animationID finished: (NSNumber *) finished context: (void *) context {
    [view1 removeFromSuperview];
}

在该动画代理方法中,您可能还希望释放 view1 并将其引用设置为 nil,具体取决于您是否需要在转换后保留它。

我知道这很老了,但是我想要理解它的逻辑。我有点困惑这在做什么。能否有人解释一下吗? - marciokoko
@marciokoko 这段代码将view2放置在view1的右侧,动画滑向左侧(以使view2替换view1),并在动画完成后移除view1。他们称之为“推动转换”。 - Costique

1
要从左到右进行动画,您可以使用以下代码块
    CATransition *transition = [CATransition animation];
    transition.duration = 0.4;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromLeft;
    [self.view.window.layer addAnimation:transition forKey:nil];
    [self presentViewController:YOUR_VIEWCONTROLLER animated:YES completion:nil];

1
另一个选项是使用块来进行动画,代码行数更少,更简单易懂:
以下是示例:
CGRect viewLeftRect;//final frames for left view
CGRect viewRightRect;//final frames for right view

[UIView animateWithDuration:0.3f animations:^{
    [viewLeft setFrame:viewLeftRect];
    [viewRight setFrame:viewRightRect];
} completion:^(BOOL finished) {
    //do what ever after completing animation
}];

0

您也可以像这样从右到左添加动画:

    scrAnimation.frame=CGRectMake(248, 175, 500, 414);  //your view start position

    [UIView animateWithDuration:0.5f
                          delay:0.0f
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         [scrAnimation setFrame:CGRectMake(0, 175, 500, 414)];   // last position
                     }
                     completion:nil];

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