图层暂停时更新 CALayer 位置是否存在问题?

2024-02-22

在暂停时阅读演示位置是否存在问题?

我正在尝试暂停并恢复CALayer。一旦CALayer已暂停,我想用其当前的呈现位置更新图层的位置。 当我尝试执行此操作时,一旦恢复图层,图层就会轻微闪烁。

这是我用来暂停和恢复的代码CALayer(基于技术问答 QA1673 http://developer.apple.com/library/ios/#qa/qa1673/_index.html#//apple_ref/doc/uid/DTS40010053由苹果公司提供):

CFTimeInterval pausedTime;
void pauseLayer(CALayer *layer)
{
    pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
    layer.speed = 0.0;
    layer.timeOffset = pausedTime;
    layer.beginTime = 0;
//    layer.position = ((CALayer*)[layer presentationLayer]).position;
}
void resumeLayer(CALayer *layer)
{
    layer.speed = 1.0;
    layer.timeOffset = 0.0;
    layer.beginTime = 0.0;

    CFTimeInterval _elapsedTimeSincePaused = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    layer.beginTime = _elapsedTimeSincePaused;
}

如果我取消注释layer.position = ((CALayer*)[layer presentationLayer]).position; in pauseLayer,当我调用时,图层会闪烁resumeLayer.

这是我的动画代码:

- (void) startAnimation:(id)sender
{
    layer10Animation = [CABasicAnimation animationWithKeyPath:@"position.x"];
    layer10Animation.duration = 1;
    layer10Animation.toValue = [NSNumber numberWithInt:300];
    layer10Animation.fromValue = [NSNumber numberWithInt:20];
    layer10Animation.repeatCount = 100;
    layer10Animation.autoreverses = YES;

    [layer10 addAnimation:layer10Animation forKey:nil];
}

此致


更新一下就没有问题了CALayer暂停时的位置。然而,它自然会产生你提到的闪烁。那是因为您正在动画中间更新图层的位置。

不要忘记创建一个CABasicAnimation并将其添加到CALayer不更改图层的设置。它创建了一个动画using层,但它不会改变层。

这就是为什么动画完成后,您会看到图层回到之前的位置。

因此,如果您要对某个图层从 A 到 B 进行动画处理,并且希望该图层在动画完成后出现在 B 处,则需要此委托回调:

- (void)animationDidStart:(CAAnimation *)theAnimation
{ 
    [CATransaction begin];
    [CATransaction setValue:(id)kCFBooleanTrue
                     forKey:kCATransactionDisableActions];
    myLayer.position = targetPosition;    
    [CATransaction commit];
}

是的,它是animationDidStart。如果我们使用animationDidStop然后你会看到另一个闪烁。该图层将位于动画的结束位置 B,然后您会在 A 处看到它闪烁,然后您会在 B 处再次看到它。

UsinganimationDidStart我们将位置设置为targetPosition, i.e.B因为这就是我们希望看到它完成的地方。

现在,关于QA1673 http://developer.apple.com/library/ios/#qa/qa1673/_index.html#//apple_ref/doc/uid/DTS40010053,你要做的就是将动画速度设置为零,并获取当前的时间戳CACurrentMediaTime()。恢复时,您将速度恢复正常,并应用暂停期间产生的任何偏移。

在您掌握窍门之前,这一切似乎都很令人困惑。我可以推荐一些阅读材料和视频吗?

一定要读过核心动画渲染架构 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/CoreAnimationArchitecture.html.

强烈推荐的视频有:

WWDC 2010 第 424 和 425 场核心动画实践第 1 部分和第 2 部分 https://developer.apple.com/videos/wwdc/2010/

WWDC 2011 第 421 场核心动画要点 https://developer.apple.com/videos/wwdc/2011/

and

开发者视频会议 716 适用于 iPhone 和 Mac 的核心动画技术 https://developer.apple.com/videos/iphone/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图层暂停时更新 CALayer 位置是否存在问题? 的相关文章

  • 自定义相机视图 Swift iOS 8 iPhone Xcode 6.1

    我想在 iPhone 的 View 中使用相机 我不想使用典型的全屏相机视图 而是我自己的 例如 我想在屏幕中间有一个 200x200 的正方形 并且有一个相机预览 在这个方块下面我想要一个拍照按钮 怎么做 我是新手 速度很快 你会想要使用
  • 比较具有相同值但顺序不同的两个数组

    我有 2 个 nsarray 具有相同的值但顺序不同 NSArray array1 0 1 2 3 NSArray array2 2 3 1 0 我需要一种方法来确定两个数组是否具有不同顺序的相同值 Kind of BOOL isSameV
  • CoreBluetooth广告检测时间

    这个问题早在10月份就已经讨论过here https stackoverflow com questions 12866551 corebluetooth connection setup time varies quite a bit 1
  • 图像高斯模糊 - iOS 8

    我有一个移动的背景图像 我想模糊它的底部 我would只用 Photoshop 就能做到 但由于图像会移动 效果不太好 这就是我的意思 看图片底部 基本上就像底座对 iPhone 的影响一样 我使用的是 iOS 8 但不是 Swift 我根
  • 如何在 iPhone 应用程序中使用正则表达式以 , (逗号)分隔字符串

    我必须读取包含三列的 csv 文件 在解析 csv 文件时 我得到了这种格式的字符串克里斯托弗 巴斯 为心爱的国家哭泣 期末论文 电子邮件受保护 cdn cgi l email protection 我想将三列的值存储在一个数组中 所以我使
  • iphone sdk - 调用视图的超级视图的视图控制器的方法

    你好 我如何在当前视图中调用当前视图的超级视图的视图控制器中实现的方法 你能帮我吗 谢谢 通常这是通过代表完成的 让您的视图接口定义一个协议和对某个委托的引用 然后让你的父视图控制器实现这个协议 然后父母会这样做 someView fooD
  • GCD 和线程

    我想了解一些有关 GCD 和线程的知识 我的视图控制器中有一个 for 循环 它要求我的模型执行一些异步网络请求 因此 如果循环运行 5 次 模型将发出 5 个网络请求 考虑到我正在使用 NSURLConnection 的 sendAsyn
  • 在横向模式下向 UIScrollView 添加子视图

    我有一个以横向模式启动的视图控制器 其中有一个 UIScrollView 我尝试创建子视图并将它们添加到 UIScrollView 但视图的框架大小都是纵向大小 这是我的代码 void viewDidLoad super viewDidLo
  • iPhone SDK - orkut API

    我曾使用 gData 库从 iPhone 中的 Google 联系人中检索联系人信息 同样 我将与 Orkut 合作 有没有像 gData 这样适用于 Orkut 的库 如果是这样 请给我链接 提前致谢 对于 orkut 我们有 orkut
  • UITableViewCell 的 viewDidAppear

    我通常使用viewDidAppear方法在视图完成出现后在视图上执行一些 UI 操作 我在各种情况下使用了此方法 它非常有用 但是 我需要在视图上进行一些 UI 更改UITableViewCell当它完成出现后 SDK中是否有任何可用的方法
  • iPad 2 检测

    由于我没有 iPad 2 因此我需要知道调用 UIDevice currentDevice model 时它返回什么 我以为它只返回 iPad 但看来我错了 有人可以告诉我吗 Thanks 检查是否有带摄像头的 iPad BOOL isIP
  • 我如何在 viewDidLoad 中执行 UIView animateWithDuration ? IOS 7

    我在 viewDidAppear 中尝试这个 但我有一秒钟的延迟 我能做什么 在 viewDidLoad 中工作 void viewDidAppear BOOL animated fullRotation CABasicAnimation
  • NSString keepCount 是 2147483647 [重复]

    这个问题在这里已经有答案了 可能的重复 NSString 保留计数 https stackoverflow com questions 1390334 nsstring retain count Objective C NSString 属
  • 如何在我的应用程序中添加应用内购买

    我想在我的应用程序中使用应用程序购买应用程序 但我不知道如何执行此操作 任何人都可以帮助我如何做以及源代码在哪里 给我链接或代码 这里有一堆链接 应用内购买编程指南 http developer apple com iphone libra
  • 如何使用 iOS 可达性

    我正在开发一个使用网络的 iPhone 应用程序 iPhone 通过 HTTP 请求与我的服务器通信 并且应该可以在 WiFi 和 3G 上运行 我目前使用NSURLConnection initWithRequest向我的服务器发送异步请
  • 为什么在尝试编译此代码时会收到错误“错误:未知类型名称'虚拟'”?

    Code struct IRenderingEngine virtual void Initialize int width int height 0 virtual void Render const 0 virtual void Upd
  • iPhone - 创建自定义 UITableViewCell 顶部和底部边框

    我一直在到处寻找 但还没有找到我的答案 我使用 JSON 中的动态单元格填充 UITableView 并尝试隐藏任何额外的单元格 我关闭了IB中的分隔符 当然所有的单元格分隔符都消失了 如何在每个 tableviewcell 的底部和顶部添
  • 如果您使用 CocoaPods,您的 .gitignore 中会包含什么内容?

    我从事 iOS 开发已经几个月了 刚刚了解到有前途的可可豆荚 http cocoapods org 用于依赖管理的库 我在个人项目上尝试过 添加了依赖项Kiwi https github com allending Kiwi到我的 Podf
  • 当我更改浏览器选项卡时,Jquery Animate 停止

    我的投资组合中有一个疯狂的问题 http hericdk com http hericdk com 我用jquery做了一个简单的动画 一个太空飞船飞行的动画 然后就出现了我的作品 这个想法不错 大家都喜欢 但问题是 由于某种奇怪的原因 当
  • 如何将图像放入此 UIPickerView 中?

    我不知道如何创建一个在文本一侧带有图像的自定义 UIPickerView 我一直在寻找一种方法 我刚刚发现了这个 UIView pickerView UIPickerView pickerView viewForRow NSInteger

随机推荐

  • Android 正则表达式模式 Incode UTF-8

    我正在 android 中尝试使用 matcher group 1 捕获 代码 String html doc html toString Pattern p Pattern compile is caption is is is Patt
  • 使用某些纸/芯元件时 dartium 中的警告

    我正在尝试使用 paper tabs paper tab 和 core pages 元素 但 dartium 显示了一堆警告 例如 from html5lib Unexpected non space characters Expected
  • 如何修复防伪令牌适用于用户“”,但当前用户是“xxxx”错误

    提供的防伪令牌适用于用户 但当前用户是 xxxx 我已经遵循了所有可能的解决方案来消除此错误 但没有成功 这是场景 我在浏览器选项卡 A 选项卡 B 中打开了 2 个单独的登录选项卡 1 我在选项卡 A 中登录我的网站 2 然后尝试登录Ta
  • VSTS 发布拉取请求构建触发器

    我的团队正在使用 VSTS 构建和发布机制 结合拉取请求分支安全设置 以便只有在拉取请求完成后才能合并代码 不过 我们遇到了一些奇怪的事情 因为当创建拉取请求 并且生成构建来证明提交 时 由拉取请求触发的此构建的完成也会间接触发发布 因为我
  • 检测 Silverlight 中的 DataContext 更改

    我有一个由多个部分组成的问题 1 Silverlight 不公开 DataContextChanged 事件是否有充分的理由 如果微软的某个人做出改变 似乎可以避免很多麻烦internal to public在 FrameworkEleme
  • C++ 右值引用和移动语义

    C 03 存在可能隐式发生不必要的副本的问题 为此 C 11引入了rvalue references and move semantics 现在我的问题是 这种不必要的复制问题是否也存在于 C 和 java 等语言中 或者只是 C 的问题
  • 当测试用例通过或失败时发送电子邮件警报

    我想在测试执行结果通过或失败或在测试管理器上执行时的任何其他状态时向用户发送电子邮件警报 我知道测试管理器无法做到这一点 但 TFS 可以 我已经尝试了各种查询组合来设置相同的警报 我想为自动化测试用例执行此操作 我将创建的构建不会发生太大
  • 打开 RewriteEngine 会产生 403 错误——如何打开 FollowSymLinks?

    我正在 OSX 上使用内置的 Apache2 我将文档根目录移动到桌面上的一个文件夹中 并确保 www and everyone具有读取权限 它工作得很好 很棒 PHP 工作 一切工作正常 直到我添加一个 htaccess仅此行 Rewri
  • 将简单的 JSON 对象转换为属性文件

    我有一个简单的 JSON 对象 想将其转换为 bash 中的属性文件 Input foo bar abc def ghi 预期输出 foo bar abc def ghi 您可以使用to entries为了那个原因 jq r to entr
  • 在 C++ 中捕获 Python 异常

    我正在开发一个服务器 客户端应用程序 其中客户端调用服务器的 API 该 API 为用户输入提供 Python 接口 这意味着客户端接口和服务器接口是用Python编写的 而套接字代码是用C 编写的 在服务器端 我有一堂课 Test 在 C
  • 检查数组是否为空似乎不起作用

    简单数组和简单检查是否是数组或对象 但是当没有数组数据而不是显示时页面崩溃No 这是数组 url get curl content tx https example com arr json decode url true if is ar
  • 显示/隐藏 ImageView 可见性时 Android 应用程序崩溃

    我一直在尝试创建我的第一个 Android 应用程序 是的 遇到了应用程序崩溃 我的片段 主 中有两个 ImageView 在相对布局中将 imageview 1 与 imageview2 重叠 我想做的是 如果有互联网连接 应该会显示 i
  • 电子 v10.1.1 给出未捕获的类型错误:无法读取未定义的属性“对话框”,但相同的代码可以在电子 v9.3.0 中使用

    I am trying to upload a file in an electron app which works perfectly for electron v9 3 0 but as soon as I use electron
  • Swift 使用 NSFetchedResultsController 和 UISearchBarDelegate

    我正在寻找解决这个问题的好方法 我想在我拥有的 TableView 上实现一些简单的搜索功能 我发现的所有示例都使用已弃用的UISearchDisplayController或使用新的UISearchController但没有NSFetch
  • 如何在mongo中高效地通过查询删除文档?

    我有一个查询 它选择要删除的文档 现在 我手动删除它们 如下所示 使用 python for id in mycoll find query fields mycoll remove id 这似乎效率不高 有没有更好的办法 EDIT 好吧
  • 从不同路径访问 PHP 会话变量

    我在 PHP 会话中遇到一个非常奇怪的问题 事实如下 创建会话变量代码 mydomain a b c create session php 读取会话变量 read mydomain a b c read session php 问题 当我从
  • PHP - 设置/模拟假日期

    我有一个有点奇怪的问题 是否可以在 PHP 中设置脚本运行时间的假日期 我使用的API使用时间段 例如当您发送请求获取一些数据时 您可以指定时间段 例如一个月 但这些时间段是固定的 它会返回从request time 1month到requ
  • C#中空字符串的sizeof

    在Java中 一个空字符串是40个字节 在Python 中它是20 个字节 C 中的空字符串对象有多大 我不能做sizeof 而且我不知道还能怎样找到答案 谢谢 是18字节 http www codeproject com KB dotne
  • 通过模型方法上的装饰器发出 Django 信号?

    我正在尝试做类似的事情这些建议的信号装饰器 http code djangoproject com ticket 9015 除了拥有一个将装饰方法连接到信号的装饰器 将信号的发送者作为装饰器的参数 之外 我还想在类方法上使用装饰器 我想像这
  • 图层暂停时更新 CALayer 位置是否存在问题?

    在暂停时阅读演示位置是否存在问题 我正在尝试暂停并恢复CALayer 一旦CALayer已暂停 我想用其当前的呈现位置更新图层的位置 当我尝试执行此操作时 一旦恢复图层 图层就会轻微闪烁 这是我用来暂停和恢复的代码CALayer 基于技术问