CATransaction 未观察到 CALayer 子类上的属性

2024-01-08

我有一个子类CALayer具有自定义属性,声明如下:

@interface MyLayer : CALayer
    @property (nonatomic,retain) NSNumber *customValue;
@end
@implementation MyLayer
    @synthesize customValue = _customValue;
@end

我想在显式的内部为该属性设置动画CATranasction,所以我设立了一个代表actionForLayer:forKey:实现的方法返回一个动画,但是任何更改someMyLayerInstance.customValue代替[CATransaction begin] ... [CATransaction end]不会导致actionForLayer:forKey使用相应的“键”值进行调用。

然而,用核武器攻击该财产MyLayer并进行更改myLayerInstance通过致电setValue:forKey: does导致actionForLayer:forKey:被打电话。

看来这是因为CALayer对未定义的属性进行键/值编码有一些魔力。我怎样才能重新创建这个魔力,以便我可以声明属性MyLayer,但仍然让动画委托观察它们?


最重要的是你需要实施所有CALayer访问器使用@dynamic。不使用@synthesize并且不要直接实现访问器。CALayer生成它自己的所有属性处理程序(正如您间接发现的那样),并且您需要让它们被使用。

你还需要让CALayer知道此属性会影响显示(鉴于您的其他评论,您可能已经这样做了)。如果还没有,您可以通过实施来做到这一点+needsDisplayForKey:并返回YES给你的钥匙。

这是一个例子CALayer动画自定义属性(摘自第 7 章iOS 5 编程突破极限 http://robnapier.net/book。完整的示例代码 http://robnapier.net/bookcode可在 Wiley 网站上找到。)该示例实现了actionForKey:在层中,但如果您愿意,您仍然可以在委托中实现该部分。

@implementation CircleLayer
@dynamic radius;

...

+ (BOOL)needsDisplayForKey:(NSString *)key {
  if ([key isEqualToString:@"radius"]) {
    return YES;
  }
  return [super needsDisplayForKey:key];
}

- (id < CAAction >)actionForKey:(NSString *)key {
  if ([self presentationLayer] != nil) {
    if ([key isEqualToString:@"radius"]) {
      CABasicAnimation *anim = [CABasicAnimation
                                animationWithKeyPath:@"radius"];
      anim.fromValue = [[self presentationLayer] 
                        valueForKey:@"radius"];
      return anim;
    }
  }

  return [super actionForKey:key];
}

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

CATransaction 未观察到 CALayer 子类上的属性 的相关文章

  • 防止点击 MKAnnotation 时检测到 MKMapView 上的触摸事件

    我有一个 UITapGestureRecognizer 当用户点击地图时 它将在我的 MKMap 上隐藏和显示工具栏 简单 但是 当用户点击 MKMapAnnotation 时 我不希望地图以正常方式响应点击 如上所述 此外 当用户点击地图
  • iPhone 应用程序中的文本在 ipad 中的 2x 模式下出现别名

    我有一个适用于 iPhone 的应用程序 使用高分辨率图像使其适用于 iPhone 和 iPad 但在 iPad 中 所有文本在 2x 模式下都会出现别名 是否可以让App在2x模式下自动改变字体大小 或者我必须手动检测设备类型并处理字体大
  • 奇怪的父/子NSManagedObjectContext现象

    我创建了两个这样的上下文 create writer MOC privateWriterContext NSManagedObjectContext alloc initWithConcurrencyType NSPrivateQueueC
  • Android - API 请求

    我开发了一个应用程序 它也在 iPhone 上 问题出在 api 请求上 我为所有请求设置了超时 有时会出现 30 60 秒的中断 看起来这个应用程序执行了几个请求 然后就中断了 一直超时 大约 45 秒后一切正常 不知道是服务器问题还是安
  • 删除具有estimatedItemSize 的项目时 UICollectionView 单元格大小会调整

    我有一个简单的项目 其中的故事板仅包含一个UICollectionViewController 使用 Xcode 7 1 1 为 iOS 9 1 构建 class ViewController UICollectionViewControl
  • NSOperation 中委托的使用

    我正在尝试利用CLLocationManager in an NSOperation 作为其中的一部分 我需要能够startUpdatingLocation然后等到收到 CLLocation 后才完成操作 目前我已经完成了以下操作 但是委托
  • CGContextSelectFont 等效项

    在 iOS 7 CGContext SelectFont 中已弃用 已弃用的消息说我必须使用 Core Text 但我不知道哪一个与这段代码完全相同 CGContextSelectFont context Helvetica kBarLab
  • malloc:***错误:已释放对象的校验和不正确 - 对象可能在释放后被修改

    我的 iOS 应用程序有一个大问题 它有时会崩溃 而没有详细的调试错误 堆栈跟踪为空 这是堆栈跟踪中仅有的两行 UIApplicationMain 中的 符号存根 UIHostedTextServiceSession DismissText
  • iOS 11 浮动 TableView 标题

    有一个应用程序包含多个部分 展开 时每个部分有几行 折叠 时没有 每个部分都有一个部分标题 使用以下子类重用它们UITableViewHeaderFooterView等等 到目前为止一切顺利 然后在 iOS 11 中 我使用了可视化调试器
  • UICollectionReusableView 方法未被调用

    我希望我的部分位于UICollectionView有一个带有图像的标题 我已按照以下步骤操作 在故事板中 分配了一个标题作为我的附件UICollectionView 给它一个标识符 创建了一个子类UICollectionReusableVi
  • 将语音添加到自定义 UIMenuController

    我创建了一个自定义UIMenuController in a UIWebView但它似乎摆脱了 说出选择 选项UIMenuController在那之后 所有测试设备上的 偏好设置 中都打开了发言选择选项 并且它出现在其他应用程序中 包括非
  • iOS NSURLSession,如何在didCompleteWithError中重试

    我想在我的服务器上尝试一次调用 直到成功为止 我想每 30 秒尝试一次 所以我使用 NSURLSession 进行通话 NSURLSessionDownloadTask task self session downloadTaskWithR
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 所有针对 iTunes Connect 的构建,导入此构建时出错 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我将构建上传到应用程序商店 之后它在活动中显示错误 任何人都可以帮帮我 SOLVED 转到构建设置 gt 搜索 bitcode gt 转启
  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • 如何在 Swift 中创建 UIAlertView?

    我一直在努力在 Swift 中创建 UIAlertView 但由于某种原因我无法得到正确的语句 因为我收到此错误 找不到接受提供的 init 重载 论点 我是这样写的 let button2Alert UIAlertView UIAlert
  • 快速钥匙串更新只有在第二次尝试时才起作用

    您好 我在更新存储在钥匙串中的登录信息方面遇到了 iOS 钥匙串的一个非常奇怪的问题 因此 如果没有保存的凭据 则正确运行保存函数会保存登录信息 如果登录信息已存在并且用户更新了密码 则更新功能仅正确更新密码 但是 如果登录信息存在并且我尝
  • 使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的指针类型不兼容

    你能帮我理解和 修复下面的错误吗 我不明白CustomCellView是一个子类UItableViewCell 代码已编译 但警告仍然存在 Incompatible pointer type initializing CustomCellV
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能

随机推荐

  • Django Forms:如果选中布尔字段,则禁用字段

    这是我的表单的定义 class WorkflowForm forms Form new user forms BooleanField required False user ModelChoiceField queryset User o
  • Openlayers-3 强制刷新地图

    我有一个自定义样式 可以显示 隐藏地图上的功能 但是当应用它时 它不会激活 直到地图由于功能更新而刷新 但我需要它立即触发 我尝试了 map render 和 renderSync 但它们什么也没做 mapResize 似乎也没有执行任何操
  • System.Web 可以与具有完整框架的 ASP.Net Core 一起使用吗

    我们正在运行基于不同 Net 版本的多个站点 其中一个站点正在运行 Net 4 6 和 ASP Net MVC 5 xx 要使用 Razor 的新语法 我们希望升级此站点以使用 Net 4 6 和 ASP Net Core 我们在网站上使用
  • Flutter:多个小部件使用相同的 GlobalKey

    当我运行此代码时 我收到错误 Multiple widgets used the same GlobalKey 所以我可以解决这个问题 如何将密钥动态传递给 listview Builder 可以通过吗 这是我的代码的简化版本 Global
  • PHP:运行计划作业(cron 作业)

    我的网络酒店上有一个网站 我想在其上运行一些计划任务 您会推荐哪些方法来实现这一目标 到目前为止 我想到的是在每个页面的顶部包含一个脚本 然后让该脚本检查是否该运行该作业 这只是我正在思考的一个简单例子 if alreadyDone 0 t
  • 用清漆+正则表达式替换页面中的内容

    如果我希望我的清漆缓存服务器在提供或存储页面 vcl fetch 之前从后端替换页面内的内容 即 更改 div 上的类 该怎么做 我想使用简单的正则表达式来执行替换 因为我想象清漆本身就支持它 Varnish 本身不支持修改响应正文 为此
  • 为什么我们的查询会卡在 MySql 中的“Writing to net”状态?

    我们有很多疑问 select from tbl message 卡在 正在写入网络 状态 该表有 98k 行 问题是 我们甚至没有从我们的应用程序中执行任何类似的查询 所以我想问题是 什么可能会生成查询 以及为什么它会陷入状态 写入网络 我
  • 使用 JavaScript 禁用 iPhone 中的“Go”按钮

    我正在为 iPhone 创建一个小表单 并在该表单上进行 JavaScript 验证 当然由服务器验证支持 但这不是重点 作为此验证的结果 我动态启用 禁用提交按钮 除了屏幕键盘上的 Go 按钮不反映我拥有的唯一提交按钮的状态并且始终处于启
  • std::map 在炼金术中损坏了?

    以下代码测试以 std string 作为键的 std map 的使用 include
  • VS 2017命令行错误D8004

    我别无选择 我正在尝试在 Visual Studio 2017 Community 上使用 GoogleTest 但它给了我很多 警告 C4996 std tr1 警告 STL4002 非标准 std tr1 命名空间和仅 TR1 的机器已
  • Ruby 和 Rails Github 操作退出代码 16

    我正在尝试为新的 Rails 项目设置一个带有 Github 操作的持续集成工作流程 这是错误 2022 05 21T17 07 01 1242737Z Your bundle only supports platforms x86 64
  • 使用SIMD右移32位压缩负数

    我正在编写一些 SSE AVX 代码 并且有一个任务将打包的有符号 32 位整数除以 2 的补码 当值为正时 这种移位工作正常 但由于移位符号位 它会产生负值的错误结果 是否有任何 SIMD 操作可以让我进行移位并保留符号位的位置 谢谢 S
  • Android:SlidingDrawer在SurfaceView下消失

    我正在尝试在 FrameLayout 上创建一个包含 LinearLayout 内容的 SlidingDrawer 起初一切似乎都很好 我在屏幕底部找到了 SlidingDrawer 的句柄 但是 如果我开始向上拖动手柄并且内容开始显示 它
  • MacOS 虚拟输入设备

    如何在代码中创建虚拟 HID 设备 我试图避免编写内核扩展来完成此任务 但这似乎是唯一的方法 我需要能够创建所有类型的虚拟 HID 设备 并让一个应用程序在后台运行以向其提供事件 有没有办法在用户空间中做到这一点 或者我必须冒险进入内核空间
  • T-SQL、XQuery 无效列

    我正在学习 XQUERY 并试图完成我认为非常简单的事情 这是我的 T SQL 代码 DECLARE XML xml set xml
  • VueJS 在渲染数据之前等待 Apollo

    另一篇文章中的简单示例 new Vue el app data filters id issuedBy issuedTo items id 1234 issuedBy Operator issuedTo abcd efgh id 5678
  • 将 CSV 文件中的数据存储到数据库中

    我有一个旅馆的 Django 模型 其中包含 FileUpload 字段之一 我将从该字段获取 CSV 文件并填充数据库 过去两天我一直在尝试搜索如何做到这一点 但无法正常工作 这如何将csv数据导入django模型 https stack
  • Twitter Bootstrap 3 - 如何用定制图标正确替换 glypiccons?

    这是我的 HTML ul class nav nav pills nav stacked custom nav pills li a href span class glyphicon glyphicon home span Home a
  • Python 列表在类实例初始化时应该为空,但事实并非如此。为什么? [复制]

    这个问题在这里已经有答案了 我想创建一个类的实例 其中包含默认为空的列表 我不想稍后将此列表设置为最终的完整列表 而是想连续向其中添加项目 这是一段示例代码来说明这一点 usr bin python class test def init
  • CATransaction 未观察到 CALayer 子类上的属性

    我有一个子类CALayer具有自定义属性 声明如下 interface MyLayer CALayer property nonatomic retain NSNumber customValue end implementation My