Iphone 使用CALayer+;面具

Iphone 使用CALayer+;面具,iphone,performance,uitableview,scroll,Iphone,Performance,Uitableview,Scroll,这不是一个真正的问题,因为我刚刚解决了这个问题,但我认为这个问题的本质对于许多iPhone开发人员来说是很常见的,而且解决方案也不是很明显,所以我想分享我的经验。为了保持StackOverflow的“问题/答案”格式,我将把细节放在问题中,把我的解决方案放在答案中 详情: 我有一个全是单元格的tableview,有两个标签,还有一个我从头组装起来的自定义切换开关控件。如果我隐藏切换控件,tableview会像champ一样滚动。然而,随着切换控件的显示,在iPhone3G上,滚动的速度令人痛苦地

这不是一个真正的问题,因为我刚刚解决了这个问题,但我认为这个问题的本质对于许多iPhone开发人员来说是很常见的,而且解决方案也不是很明显,所以我想分享我的经验。为了保持StackOverflow的“问题/答案”格式,我将把细节放在问题中,把我的解决方案放在答案中

详情:

我有一个全是单元格的tableview,有两个标签,还有一个我从头组装起来的自定义切换开关控件。如果我隐藏切换控件,tableview会像champ一样滚动。然而,随着切换控件的显示,在iPhone3G上,滚动的速度令人痛苦地起伏/缓慢。我的tableview单元格没有透明组件(图层的遮罩除外),我正在重用单元格

自定义切换控件扩展了UIButton,它的层有两个组件—一个包含切换滑动“开关”部分的UIImageView和一个用作遮罩的细长椭圆,背景在层后面绘制在
-drawRect:


我怎么修好的?很快就会有答案…

我发现慢度/起伏度的来源是在滚动时必须将图层与遮罩子图层重新组合。我猜每次重新绘制屏幕时都必须重新绘制切换开关

我的解决方案是隐藏切换开关层/掩码,除非它正在更改状态。当它完全处于打开或关闭位置时,我隐藏了切换开关层,并将其替换为切换开关的图像。当用户触摸切换时,虚拟图像将隐藏,实际的toggleswitch组件将显示并以相反的状态执行动画。动画完成后,我隐藏切换开关组件并显示虚拟图像,确保将图像更改为当前状态。这大大提高了滚动性能……我敢说它几乎和本机默认的tableview单元格一样好