UIScrollView和SpriteKit一起使用时出现随机卡顿问题

3

我在滚动页面时遇到了卡顿/延迟的情况。

这只会出现在iPhone 5上,非常少见地出现在iPhone 5s上。它只会在按住手指时出现,而不是在滚动视图减速时。它出现得非常随机,但一旦开始卡顿,它总是持续一段时间。

可能会因为多次跳转到主屏幕然后再返回才会触发(有时它会运行一段时间,有时卡顿几乎全部时间)。正如我所说,它非常随机,所以如果您尝试此示例项目并没有看到任何卡顿,请耐心尝试更多次。

示例项目基于SpriteKit游戏模板,并且我尽量少对其进行更改,以便更容易进行调试。

示例项目: https://github.com/bobmoff/ScrollStudderingExample

我正在与苹果支持部门联系,但到目前为止,他们只提到将其发送给SpriteKit技术人员并回复给我。

我已经为这个问题苦苦挣扎了大约一年,所以如果有人能够提出真正的解决方案,我会因此而感到幸福。


你是在使用滚动视图来实现移动相机系统吗?还是这是UIKit主菜单的一部分或其他什么东西? - fearmint
这更像是一个滚动菜单。如果在SpriteKit中有UIScrollView的替代方案,我会很乐意使用它,但实际上并没有。现有的唯一选择远远不能达到UIScrollView本地感觉的水平。 - bobmoff
不,但感谢建议,我会立即这样做。不太清楚要寻找什么,但我会尝试一下。 - bobmoff
@Sven 没有什么进展。我在分析工具方面并不是很熟悉,也没有发现特别的问题。唯一引起注意的是出现卡顿时,滚动条的更新/渲染也开始闪烁。所以感觉像是 UIKit 部分由于某种原因开始出现了延迟。 - bobmoff
你有没有听到SpriteKit技术人员的任何消息? - user867635
显示剩余2条评论
1个回答

0
这只是一个想法:您尝试过将scrollViewDidScroll方法与动画分离吗?(就像在JavaScript中“去抖”滚动事件一样。)
我现在无法测试它,也不是说这是一个好的做法,但我很好奇这是否可以解决问题...
抽象示例:
某个地方的全局变量:
CGPoint globalVar;


在视图控制器中:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    globalVar = scrollView.contentOffset;
}


在SKScene中:

-(void)update:(CFTimeInterval)currentTime {

     spriteToScroll.position = globalVar;
}

我从另一位开发者那里得到了这个建议,但对我没有用。我现在再次尝试了一下,仍然没有运气。这是一个包含我的添加代码的分支:https://github.com/bobmoff/ScrollStudderingExample/tree/decoupled - bobmoff
好的,谢谢。我将在设备上进行测试。我真的想在应用程序中使用一个滚动视图。但是,无论是CCScrollview还是其他任何解决方案都无法与您的UIScrollView + SpriteKit解决方案相媲美。 - user867635

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接