我有一系列动画应该一个接一个地触发延迟。我使用的代码工作正常,但我希望我动画的所有视图无限制地在一个圆圈中动画。
这是代码:
[UIView animateWithDuration:2.0
delay:2.0
options: UIViewAnimationOptionTransitionNone
animations:^{
carouselTextView.frame=CGRectMake(-320, 200, 1600, 150);
}
completion:^(BOOL finished){
{
[UIView animateWithDuration:2.0
delay:2.0
options: UIViewAnimationOptionTransitionNone
animations:^{
carouselTextView.frame=CGRectMake(-640, 200, 1600, 150);
}
completion:^(BOOL finished){
{
[UIView animateWithDuration:2.0
delay:2.0
options: UIViewAnimationOptionTransitionNone
animations:^{
carouselTextView.frame=CGRectMake(-960, 200, 1600, 150);
}
completion:^(BOOL finished){
[UIView animateWithDuration:2.0
delay:2.0
options: UIViewAnimationOptionTransitionNone
animations:^{
carouselTextView.frame=CGRectMake(-1280, 200, 1600, 150);
}
completion:^(BOOL finished){
}]; }];
};
}];
};
}];
答案 0 :(得分:1)
您不应该从完成部分的开头再次编写所有动画,您需要做的就是再次运行该方法,代码如下:
completion:^(BOOL finished){
[self methodYouNamed];
}
在完成部分编写代码,这里的语法很简单,只要你的动画完成就会说**,再次运行方法,这不会结束,并且会永远继续下去**
答案 1 :(得分:0)
好的,我会帮忙的。首先,您需要从常量部分中辨别动画序列的变量部分。提供变量部分的某种数据存储,并使用方法循环它们。
所以看一下代码,我所能看到的就是这一点:
carouselTextView.frame=CGRectMake(...);
(注意所有这些代码都在你班级的实现文件中)。
所以我们将它们存储在static
数组中(它是static
,因为我假设值永远不会改变,但是如果它们可以改变那么它们将需要是类的实例变量):< / p>
static CGRect _carouselTextViewFrames[] = {
{-320, 200, 1600, 150},
{-640, 200, 1600, 150},
{-960, 200, 1600, 150},
{-1280, 200, 1600, 150}
};
const NSInteger NUM_CAROUSEL_TEXT_FIELD_FRAMES = sizeof(_carouselTextViewFrames) / sizeof(_carouselTextViewFrames[0]);
接下来,我们需要跟踪当前的轮播文本视图框(_carouselTextViewFrames[]
的索引)。这必须是一个实例变量:
@interface YourClass ()
// private property
@property (nonatomic, assign) NSInteger carouselTextViewFrameIndex;
@end
并且必须将其初始化为-1
,因此使用的第一个索引为0
(请参阅下面的nextCarouselAnimation
):
- (id)init { // Or whatever designated initializer is used in your class
self = [super init];
if (self) {
self.carouselTextViewFrameIndex = -1;
}
return self;
}
现在将开始下一个动画的方法:
- (void)nextCarouselAnimation {
self.carouselTextViewFrameIndex = (self.carouselTextViewFrameIndex + 1) % NUM_CAROUSEL_TEXT_FIELD_FRAMES;
[UIView animateWithDuration:2.0
delay:2.0
options:UIViewAnimationOptionTransitionNone
animations:^{
carouselTextView.frame = _carouselTextViewFrames[self.carouselTextViewFrameIndex];
}
completion:^(BOOL finished){
[self nextCarouselAnimation];
}];
}
最后你只需要从适当的地方调用nextCarouselAnimation
来开始动画循环(你没有说出你的类来自哪个,所以我不知道那可能是什么)。< / p>
注意:此代码未经测试,可能包含许多错误。