为UIView实现幻灯片效果

时间:2011-03-26 02:24:51

标签: iphone animation uiview slideup

所有

我正在拼命地编写一种方法,该方法可以动画在一种“向上滑动”效果中添加子视图,其中视图从特定点滑动到屏幕上。我可以让UIImageView工作,但我有一点时间将它应用到UIPickerView。会发生什么,UIPickerView仅移动并动画大约1/4的高度。 UIImageView真正以高度0开始并向上滑动到屏幕上。

到目前为止,这是我的代码:


+ (void) slideupView:(UIView*) view duration:(CGFloat) duration completion:(void (^)(BOOL 
                                     finished)) completion {
    CGRect endBounds = view.bounds;
    CGRect startBounds = endBounds;

    startBounds.size.height = 0;

    view.bounds = startBounds;
    view.contentMode = UIViewContentModeTop;
    view.clipsToBounds = YES;
    view.layer.anchorPoint = CGPointMake(0.5, 1.0); 

    CGPoint pos = view.layer.position;
    pos.y += (endBounds.size.height / 2);
    view.layer.position = pos;

    [UIView animateWithDuration:duration delay:0.0        
                 options:UIViewAnimationOptionAllowUserInteraction
         animations:^{
             view.bounds = endBounds;
         }
         completion:completion];
}

从我读过的内容来看,听起来鼓励的方法是使用边界矩形而不是框架,因为如果修改了变换,框架方法将无效。

我还读过一个人无法改变UIPickerView的高度,所以我想知道这是否是造成这个问题的原因。不可否认,我没有在任何其他UIView子类上尝试过它。

有什么想法?有更好的方法吗?我只是想在屏幕上设置动画,类似于呈现模态视图控制器的视图,除了我不希望它覆盖整个屏幕。我只想要一个上滑效果,就像键盘出现在屏幕上一样。

谢谢! 贾斯汀

2 个答案:

答案 0 :(得分:2)

如果您只是想像键盘一样向上滑动视图,那么您可以通过动画更改视图的y坐标来实现。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f,460.0f,320.0f,260.0f)];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:[self view] cache:YES];
[view setFrame:CGRectMake(0.0f,200.0f,320.0f,260.0f)];
[UIView commitAnimations];

答案 1 :(得分:0)

“Bounds”是指视图本身的内部坐标系,而“frame”和“center”是指视图在其父坐标系中的位置。因此,要将视图滑动到屏幕上,您需要为框架或中心设置动画。