首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可可: CATransaction和NSAnimationContext有什么不同

可可: CATransaction和NSAnimationContext有什么不同
EN

Stack Overflow用户
提问于 2012-09-11 00:02:45
回答 2查看 1.3K关注 0票数 3

我可以使用代码动画地移动图层冲洗视图:

代码语言:javascript
复制
[CATransaction setAnimationDuration:2];
self.imageLayer.position = CGPointMake(0, 0);

我也可以通过下面的代码来实现:

代码语言:javascript
复制
 [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
    [context setDuration:2];
    self.imageLayer.position = CGPointMake(0, 0);
} completionHandler:nil];

我想知道CATransaction和NSAnimationContext有什么不同,我应该用哪一个来动画视图?为什么可以在NSAnimationContext和CATransaction中设置时长?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-11 04:22:58

CATransaction处理核心动画层动画。CATransaction是iOS和Mac之间的跨平台。

NSAnimationContext与NSAnimationContext一起工作。这是特定于Mac OS的。

( NS动画内容仅适用于iOS,UIView动画内容仅适用于Mac。)

这些天我更多的是在iOS上工作,而不是Mac,我总是在寻找跨平台的方式来做事情。

CAAnimation、CALayer、CAAnimationGroup等在Mac和iOS之间几乎是一样的。有一些不同(例如,iOS不支持quicktime层,iOS对核心图像的支持更有限,等等)但是CA的东西与其说是不同,不如说是相似。

票数 4
EN

Stack Overflow用户

发布于 2016-09-28 15:47:51

在大多数情况下,NSAnimationContext是作为CATransaction的包装器实现的。您可以使用诸如Hopper之类的反汇编工具对AppKit的代码进行逆向工程,并亲自查看。下面是NSAnimationContext在伪Objective-C中的一些重构方法:

代码语言:javascript
复制
void +[NSAnimationContext beginGrouping](void * self, void * _cmd) {
  if (([CATransaction currentState] & 0x3) != 0x0) {
    [CATransaction begin];
  } else {
    rdi = @class(CATransaction);
    if (pthread_main_np() != 0x0) {
      [rdi activate];
      [CATransaction begin];
    }
    else {
      [rdi begin];
      [CATransaction activateBackground:0x1];
    }
  }
  [CATransaction setValue:@(YES) forKey:@"NSAnimationContextBeganGroup"];
  return;
}

void +[NSAnimationContext endGrouping](void * self, void * _cmd) {
  [CATransaction commit];
  return;
}

void -[NSAnimationContext setTimingFunction:](void * self, void * _cmd, void * arg2) {
  [CATransaction setAnimationTimingFunction:arg2];
  return;
}

除此之外,NSAnimationContext还有几个额外的功能,比如在按下shift键时改变动画持续时间(NSAnimationSlowMotionOnShift)和测量性能。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12355371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档