实现滑动效果的一个UIView

问题描述:

所有,实现滑动效果的一个UIView

我拼命写,将动画在一种“向上滑动”效应,增加一个子视图的方法,其视图滑到从屏幕特别点。我可以得到一个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子类。

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

谢谢! 贾斯汀

如果你只是想滑动你的视图,就像键盘出现,那么你可以通过动画改变视图的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]; 
+0

够简单,但我不知道为什么不使用view.frame属性? – tia 2011-03-26 04:03:23

+0

但是它不像动画框一样简单,因为我想从屏幕上的任意一点开始动画,而不仅仅是从屏幕开始。 – 2011-03-26 19:55:51

+0

是的,从屏幕上的特定点添加视图动画不是一件容易的事情,可以通过一种技巧来使用图像来隐藏动画,但这取决于您的完整屏幕视图。 – saadnib 2011-03-27 02:31:14

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