实现滑动效果的一个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];
答
“边界”是指视图本身的内部坐标系中,而“帧”和“中心”指的是在其父的坐标系的视图中的位置。因此,要将视图滑动到屏幕上,您需要为框架或中心设置动画。
够简单,但我不知道为什么不使用view.frame属性? – tia 2011-03-26 04:03:23
但是它不像动画框一样简单,因为我想从屏幕上的任意一点开始动画,而不仅仅是从屏幕开始。 – 2011-03-26 19:55:51
是的,从屏幕上的特定点添加视图动画不是一件容易的事情,可以通过一种技巧来使用图像来隐藏动画,但这取决于您的完整屏幕视图。 – saadnib 2011-03-27 02:31:14