小编Sam*_*Sam的帖子

CoreAnimation的主题

最近,我一直试图找到一种通过GDB分析动画的方法(没有其他好的理由而不是好奇心.)据我所知,CoreAnimation在一个单独的线程中运行它的动画.但是,在通过GDB挂起所有活动线程后,我的动画(特别CAKeyFrameAnimationUIImageView使用的)仍然在运行.

这让我相信发生了两件事之一:

1.)无论出于何种原因,我们都不知道它的线索.

2.)我错过了一些非常明显的东西.

对此问题的任何反馈都非常感谢.谢谢.

gdb core-animation objective-c

17
推荐指数
1
解决办法
484
查看次数

动画CALayer的界限w /重绘

我想知道如何动画CALayer的边界,以便在每个边界变化时,层调用drawInContext:.我在我的CALayer子类上尝试了以下两种方法:

  • 设置needsDisplayOnBoundsChangeYES
  • 返回YES+ (BOOL)needsDisplayForKey:(NSString*)keybounds

都没有工作.CALayer似乎决定使用图层的原始内容,并根据contentsGravity(我认为是性能)来缩放它们.这是他们的解决方法还是我错过了一些明显的东西?

编辑:顺便说一下,我注意到我的自定义CALayer子类没有调用initWithLayer:创建presentationLayer- 怪异.

先谢谢你,山姆

iphone core-animation objective-c calayer bounds

16
推荐指数
2
解决办法
4345
查看次数

60赫兹NSTimer和自动释放内存

我的NSTimer射击速度为60 fps.它更新了C++模型,然后通过Quartz 2D绘制.这很有效,除非内存快速累积,即使我没有分配任何东西.仪器报告没有泄漏,但很多CFRunLoopTimers(我猜从重复NSTimer?)似乎正在积累.单击窗口或按一个键清除它们中的大多数,这似乎指向自动释放池没有经常耗尽.我是否必须依靠事件来循环自动释放池,还是有更好的方法来清除内存?

任何帮助表示赞赏,谢谢

萨姆

定时器创建(timer是一个ivar):

timer = [NSTimer scheduledTimerWithTimeInterval:1.0f / 60 target:self selector:@selector(update:) userInfo:nil repeats:YES];
Run Code Online (Sandbox Code Playgroud)

update: 方法:

- (void)update:(NSTimer *)timer {
    controller->Update();
    [self.view setNeedsDisplay:YES];
}
Run Code Online (Sandbox Code Playgroud)

更新:

稍微讨论了这一点后,我做了几个额外的观察.

1.) [self.view setNeedsDisplay:YES] 似乎是产生这些的罪魁祸首CFRunLoopTimers.更换它[self.view display]可以解决问题,但代价是性能.

2.)将频率降低到20-30 fps并保持"[self.view setNeedsDisplay:YES]"也会导致问题消失.

这似乎意味着setNeedsDisplay:不喜欢被大量调用(可能会显示每秒更多的时间?).我坦率地无法理解"过度调用"它的问题,如果所有这一切都告诉视图在eventloop结束时重新显示.

我相信我在这里遗漏了一些东西,非常感谢任何额外的帮助.

memory objective-c autorelease nstimer

6
推荐指数
1
解决办法
1844
查看次数

类别冲突

这个最近的问题让我想到了类别冲突,特别是涉及其中的UIViewControllerRotation类别UIViewController.h.这个类别包括shouldAutorotateToInterfaceOrientation:.如果一个人想要覆盖这个方法(通过一个类别)并让它为每个方法运行相同的代码UIViewController(就像链接的帖子试图完成的那样)那么他们就有两个使用相同方法的类别 - 我读到的东西导致未定义行为.

我尝试了一下,对于iOS 4.3中基于标准视图的应用程序,旋转逻辑回落到默认的纵向旋转,有效地忽略了类别.这是shouldAutorotateToInterfaceOrientation:我的UIViewController子类中没有定义的方法.有趣的是,当我确定shouldAutorotateToInterfaceOrientation:方法并简单地调用时,return [super shouldAutorotateToInterfaceOrientation:]该类别被调用.所以这给我留下了两个问题:

  1. 当你有类别方法冲突时,所有的赌注都是关闭的(行为方面的)吗?
  2. 如果他们想要覆盖继承的类别方法,那是不是运气不好?

任何反馈都非常感谢!谢谢.

objective-c categories

4
推荐指数
1
解决办法
2342
查看次数

使用 Boost::graph 随机访问顶点

我正在尝试使用 OpenMP 并行迭代我的 boost 图的顶点。这似乎需要一个支持随机访问元素的迭代器(例如,itr[i]获取第ith 个元素)。但是,vertices(g)返回 (a vertex_iterator)的迭代器似乎不支持这一点。有没有一种高效、干净的方法来实现这一目标?理想情况下,我只想要一个循环标准,例如:

for (int i = 0; i < num_vertices; i++) {
  vertex v = itr[i];
  // Compute on vertex
}
Run Code Online (Sandbox Code Playgroud)

它将与 OpenMP 合作。谢谢!

c++ boost boost-graph

4
推荐指数
1
解决办法
461
查看次数