在UIScrollView上平滑移动元素

时间:2011-09-21 16:06:33

标签: iphone objective-c ios uiscrollview

我有UIScrollView放置元素(元素从上到下放置),如何删除一行并平滑移动项目而不重绘?

2 个答案:

答案 0 :(得分:1)

至于删除视图,您需要使用CATransition。移除时,UIView动画将不起作用,因为此概念在动画上下文中不可动画。但是,过渡的概念是有道理的:

CATransition *transition = [CATransition animation];
transition.duration = 0.4;

[someView.layer addAnimation:transition forKey:kCATransition];
[someView removeFromSuperview];

请注意,对图层进行更改以及将动画添加到图层的顺序无关紧要,只要它发生在同一堆栈框架内(即,只要它发生在图层之前)下一个主循环循环)。

至于改变现状,使用UIView动画方法:

[UIView animateWithDuration:0.4 animations:
^{
    // Change the frames, bounds, etc. of any number of views here
}];

答案 1 :(得分:0)

嗯,移动UIViews(和子类)的简单方法是使用Core Animation

举一个例子,我们假设您要将UIImageView 10像素向上移动,这就是我要这样做的方式:

[UIView beginAnimations:@"animation" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:1.0]; //In seconds
int newPosY = myImage.frame.origin.y - 10;
[myImage setFrame:CGRectMake(self.frame.origin.x, newPosY, myImage.frame.size.width, myImage.frame.size.height)];

[UIView commitAnimations];

编辑:(感谢LucasTizma)由于Apple不推荐使用此方法,因此您最好使用animateWithDuration:animations:或其中的任何变体。查看this