gpt4 book ai didi

iphone - 在 iOS 中,当 View 动画已经在设置动画时启动它会发生什么?

转载 作者:可可西里 更新时间:2023-11-01 06:11:49 25 4
gpt4 key购买 nike

当一个 View 被点击主视图的手势识别器激活时:

-(void) doAnimate {
[UIView animateWithDuration:3

animations:^{
self.circleView.center = CGPointMake(100, 300);
}

completion:^(BOOL finished) {
NSLog(@"finished is %i", finished);
[UIView animateWithDuration:1 animations:^{
self.circleView.center = CGPointMake(250, 300);
}];
}
];
}

(有链式动画)。如果它是动画的并且再次点击主视图,我实际上看到完成处理程序被调用了两次,第一次是 TRUE,第二次是 FALSE。我以为它只被调用一次,用 FALSE?我在 Apple's doc 中找不到它.如果动画在动画已经开始时开始,是否有关于它如何工作的规则? (我认为它适用于再次对同一 View 进行动画处理,如果在对 view1 进行动画处理时对 view2 进行动画处理则不适用?)


更新:以下代码可以显示更多信息:

-(void) dropAnimate:(UIGestureRecognizer *) g {

int n = arc4random() % 10000;
int y = 501 + arc4random() % 200;
NSLog(@"y is %i", y);
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, y, 10, 10)];
label.text = @"x";
[self.view addSubview:label];

[UIView animateWithDuration:3

animations:^{
NSLog(@"n is %i", n);
self.circleView.center = CGPointMake(100, y);
}
completion:^(BOOL finished) {
NSLog(@"n is %i", n);
NSLog(@"finished is %i y is %i", finished, y);
[UIView animateWithDuration:3 animations:^{
self.circleView.center = CGPointMake(250, y);
}
];

}

];
NSLog(@"finished the method call");

}

除了下面@Kai 的回答,当已经有一个动画正在进行时,同一个 UIView 对象的新动画似乎有一个规则:旧动画将立即完成其效果,然后运行新动画, 但接下来旧动画的 completionNO 调用,现在第三个动画开始,这导致动画 2 完成效果,但接下来它的 completion block 被调用,带有 NO,它使动画 3 立即生效……我们看到动画 4 运行了 3 秒。

可以尝试上面的示例代码...为了简化它,只需删除 completion block ,然后尝试它,它确认了以下规则:如果我们开始一个新的同一对象上的动画,旧动画立即生效,新动画运行...

对于 completion block ,如果 completion block 开始另一个动画,它会变得非常复杂......

所以我认为最后一件事是:是否有任何文档或规范指定了此行为?

最佳答案

我认为会发生以下情况:

您的第一个触发器将 center 设置为 (100,300) 然后为 View 设置动画(请注意 center 属性 在您实际看到之前发生变化它!)。您的第二个触发器立即返回(使用 YES 调用 completion),因为没有任何动画(该属性之前已经设置为完全相同的值)并重置 center 并通过它强制第一个动画(仍在运行)以 NO 停止,因为 circleview 通过获取新的 center 从它的 disired 动画中撕掉> (请注意,在调用 completion 之前,第二个触发器不会干扰第一个动画,因为 circleviewcenter 属性 没有改变)。

关于iphone - 在 iOS 中,当 View 动画已经在设置动画时启动它会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com