ios - 从 for 循环中调用时看不到 CABasicAnimation

标签 ios objective-c cocoa-touch animation for-loop

我有一个动画,可以在网格上随机移动一个瓷砖,效果很好。但是,当我调用 for 循环时,您看不到任何动画。我如何让它工作?

    for (i=0; i<10 ; i++){
        // Call animation function
         sleep(.5);
    }

动画看起来像

CABasicAnimation *move;
[move setFromValue:[NSValue valueWithCGPoint:[button.layer position]]];
CGPoint toLoc = [button.layer position];
// modify toLoc by +/-70px in x/y direction 
[move setToValue:[NSValue valueWithCGPoint:toLoc]];
[move setDuration:0.5];
[button.layer setPosition:toLoc];

我感谢任何建议/评论:)

最佳答案

当您开始动画时,您需要让控制权返回到系统才能看到它执行动画。在当今的多线程系统世界中,插休眠眠几乎从来都不是正确的做法。这肯定是您遇到此问题的原因。

相反,您可以考虑这样做:

for (i=0; i<10 ; i++){
  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(i * 0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    // Call animation function
  });
}

鉴于您的 sleep 时间与您预期的动画持续时间相同,看起来您只是在尝试重复您的动画。相反,尝试仅添加此行并删除循环:

[move setRepeatCount:10];

您还需要实例化对象并将动画实际添加到图层。

CABasicAnimation *move = [[CABasicAnimation alloc] init];
[move setFromValue:[NSValue valueWithCGPoint:[button.layer position]]];
CGPoint toLoc = [button.layer position];
// modify toLoc by +/-70px in x/y direction 
[move setToValue:[NSValue valueWithCGPoint:toLoc]];
[move setDuration:0.5];
[move setRepeatCount:10];
[button.layer addAnimation:move forKey:@"position"];

关于ios - 从 for 循环中调用时看不到 CABasicAnimation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28549103/

相关文章:

objective-c - AVAssetReader 采样率

ios - 有没有关于 cocoa touch 自动化 UI 测试的好教程?

ios - 使用 Google 附近消息时的“NSConcreteMutableAttributedString initWithString::nil value”

ios - 以编程方式调整 iOS 中的按钮大小

ios - 如何将 2 个按钮对齐到 UIToolbar 的左右边框

Objective-C 中的 iOS 10 富媒体推送通知(媒体附件)

ios - 一个非常简单的应用程序的本地化.. 如何连接按钮?

javascript - 元素在键盘输入时不由自主地切换

ios - 使用 swiftvalidator 时,类 'AppDelegate' 的重复接口(interface)定义错误和属性有先前的声明错误

iOS 安全配置参数