我在我的应用程序中遇到问题。 我想要发生的是当我点击button2时,它消失并停止移动。 现在发生的事情是,当我点击button2时,它会消失,但不会停止移动(即使它隐藏)。任何帮助? 码: @IBOutlet var label: UILabel! @IBOutlet var label2: UILabel! @IBOutlet var label3: UILabel! @IBOutlet var button2: UIButton! @IBAction func button3(sender: UIButton) { label.hidden = false button2.hidden = true } @IBOutlet var button4: UIButton! @IBAction func button5(sender: UIButton) { button4.hidden = true label2.hidden = false } @IBAction func button1(sender: UIButton) { label.hidden = […]
由于我们正在以programmatically进行讨论,因此乐器不在考虑之列。 提前列出一些参考资料: 计算iphone应用程序的fps(每秒帧数) iOS屏幕上显示FPS(无仪器) iOS界面以什么帧率运行animation? 1.使用CADisplayLink 根据文件, 持续时间属性提供了帧之间的时间量。 您可以在您的应用程序中使用此值来计算显示的帧速率… 所以在我的演示项目中,我将一个displayLink添加到mainRunLoop for UITrackingRunLoopMode: self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(screenDidUpdated)]; [self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode]; 并使用duration来计算FPS。 但是出于我的预期, duration总是0.016667(〜FPS 60),不pipetableView是否顺利滚动。 我如何使tableView滞后是添加一行- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath : NSData *data = [NSData dataWithContentsOfURL:url]; 然后我转向displayLink.timestamp ,它工作。 2.观察drawRect: 我的第二个想法是观察drawRect:我认为当tableView滚动时,它的drawRect:将被逐帧调用,然后我可以根据drawRect: callings之间的时间差来计算FPS。 但它失败了,导致drawRect:只被调用一次(而单元格多次)。 这种方法类似于Using CADisplayLink ,但也许我select了错误的位置/方法(如drawRect: Using CADisplayLink来观察,我推荐的方法是观察? 问题: 仪器如何精确测量FPS? 文件是using duration to calculate FPS错误的吗? […]
我在我的iPhone应用程序中使用CADisplayLink 。 这是相关的代码: SMPTELink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onTick)]; SMPTELink.frameInterval = 2;//30fps 60/n = fps [SMPTELink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; 因此onTick被称为每帧30FPS (1/30秒)。 这在iOS6 +伟大的工程 – 完全正是我所需要的。 但是,当我在运行iOS5.1的iPhone 4上运行我的应用程序时,onTick方法的运行速度比iOS6稍慢。 几乎就像它运行它29FPS 。 一点点之后,它与iOS6 iPhone 5不同步。 onTick方法中的代码并不费时(这是我的想法之一),而不是iPhone,因为应用程序在运行iOS6的iPhone 4上运行良好。 在iOS5.1 CADisplayLinkfunction是否CADisplayLink不同? 任何可能的解决方法/解决scheme?
解决scheme注意,不是一个问题。 UIScrollView通过阻止在CADisplayLink注册到NSDefaultRunLoopMode时触发CADisplayLink暂停OpenGL渲染。 但是,如果您使用NSRunLoopCommonModes来解决这个问题, UIScrollView将停止滚动滚动。 一旦停止,它不会再滚动。 (破碎) 并且在其他线程/ runloop中注册CADisplayLink(正如在这个问题的回答中描述的那样: 当UIScrollView滚动时,CADisplayLink停止更新 )减less了UIScrollView的行为中断,但是不能消除。
我有一个CAEAGLLayer支持的视图,它位于UIScrollView中。 当我开始滚动时,调用openGL视图的-draw方法的CADisplayLink停止调用。 我validation了我的runloop启动/停止方法不会在滚动时被调用。 一旦滚动开始,-draw方法就不会被调用,并且只要滚动结束,就会继续调用。 滚动开始后,UIKit是否立即停止CADisplayLink? 显示链接被添加到运行循环中,如下所示: [dl addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 也许这与运行循环模式和UIScrollView有冲突? 是否有其他运行循环模式或替代解决scheme来保持CADisplayLink触发,即使UIScrollView正在滚动? 我以为在任何应用程序中都可以有不止一个CADisplayLink。 这是错的吗?