关于如何同时为不同的 UIView 设置动画的方法
Recipes on how to animate different UIViews at the same time
我有不同的 UIView
应该同时设置动画。我的实际做法如下:
- (void)moveRectangles {
NSUInteger count = [self.dataSource numberOfRectangles];
for (NSUInteger i = 0; i < count; i++) {
[self snapToPositionWithIndex:i];
}
}
其中 snapToPositionWithIndex:
的实现方式如下。
- (void)snapToPositionWithIndex:(NSUInteger)index {
CGPoint point = [[self.positions objectAtIndex:index] CGPointValue];
UIView *rectangleView = [self.items objectAtIndex:index];
[UIView animateWithDuration:self.animationTimeInterval animations:^{
rectangleView.center = point;
} completion:nil];
}
如您所见,我为每个矩形创建了一个动画块。这是应该遵循的正确方法,还是有更简单、更高效的方法来实现这一目标?如果我有很多视图要移动怎么办?
我认为你用上面的代码做得很好,我唯一想替换的是:-
for (NSUInteger i = 0; i < count; i++)
快速枚举。
你的方法很好。您也可以使用单个动画块来编写它,其中 for 循环位于块内,但我认为这种方法并不比您的方法好。无论如何,系统都会为每个正在动画的对象创建一个单独的核心动画。
我有不同的 UIView
应该同时设置动画。我的实际做法如下:
- (void)moveRectangles {
NSUInteger count = [self.dataSource numberOfRectangles];
for (NSUInteger i = 0; i < count; i++) {
[self snapToPositionWithIndex:i];
}
}
其中 snapToPositionWithIndex:
的实现方式如下。
- (void)snapToPositionWithIndex:(NSUInteger)index {
CGPoint point = [[self.positions objectAtIndex:index] CGPointValue];
UIView *rectangleView = [self.items objectAtIndex:index];
[UIView animateWithDuration:self.animationTimeInterval animations:^{
rectangleView.center = point;
} completion:nil];
}
如您所见,我为每个矩形创建了一个动画块。这是应该遵循的正确方法,还是有更简单、更高效的方法来实现这一目标?如果我有很多视图要移动怎么办?
我认为你用上面的代码做得很好,我唯一想替换的是:-
for (NSUInteger i = 0; i < count; i++)
快速枚举。
你的方法很好。您也可以使用单个动画块来编写它,其中 for 循环位于块内,但我认为这种方法并不比您的方法好。无论如何,系统都会为每个正在动画的对象创建一个单独的核心动画。