1

全部,

我正在拼命地编写一种方法,该方法将以一种“向上滑动”的效果动画添加子视图,其中视图从特定点滑到屏幕上。我可以让 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 子类上尝试过它。

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

谢谢!贾斯汀

4

2 回答 2

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];
于 2011-03-26T02:50:12.447 回答
0

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

于 2011-03-26T03:10:59.293 回答