小编Sum*_*mon的帖子

UIView self.layer.shouldRasterize = YES和性能问题

我想分享我self.layer.shouldRasterize = YES;在UIViews上使用旗帜的经验.

我有一个UIView类层次结构已经self.layer.shouldRasterize变成ON,以提高性能滚动(所有的人都静子视图是比设备的屏幕大).

今天在其中一个子类中我用来CAEmitterLayer产生漂亮的粒子效果.

业绩是真穷,虽然粒子的数目确实很低(50个).

这个问题的原因是什么?

performance ios5 caemitterlayer

14
推荐指数
2
解决办法
2万
查看次数

结合UIView动画块和OpenGL ES渲染

我正在开发一款iP*游戏,我使用了UIKit和OpenGL ES 2.0.UIKit元素在OpenGL视图上呈现,占据了大量(任意)的屏幕空间.我必须承认Apple已经做了出色的工作,游戏的帧速率始终是60 FPS.

为了得出这个结论,我对性能做了很多测试:

  1. 我在OpenGL视图中添加了许多静态(不动)UIViews - 好的!
  2. 我使用自定义代码动画相同的UIViews(修改了我游戏的drawFrame方法中的中心属性) - 好的!
  3. 我在UIViews下添加了许多OpenGL ES元素 - 好的!
  4. 我在UIViews下添加了许多移动的OpenGL ES元素 - 好的!

所以,现在我想利用核心动画框架来动画UIKit元素.我利用了

[UIView animateWithDuration:delay:options:animations:completion:]
Run Code Online (Sandbox Code Playgroud)

在oder中执行动画(我的目标是iOS 4或更新版本).

现在的问题是,帧速率有这种怪异的行为:有时我在60 fps的很多很多 UIKit的动画元素(30元对我来说是OK)和其他一些倍帧速率显然是在60个FPS即使有单一动画的UIKit元素,但我无法用仪器测量它!让我解释一下:当我打开仪器并监控核心动画和/或OpenGL驱动程序时,我总是得到60 fps.很明显,事实并非如此,我可以看到OpenGL动画的移动速度比顶部相应的UIKit动画慢得多.如果我从视图中删除UIKit元素,帧速率将恢复正常.当用户在玩游戏时改变设备的音量时,在任何OpenGL ES游戏中都会发生与我在此描述的类似情况.当显示当前音量的透明视图开始淡出并且直到它完全消失时,帧速率急剧下降,但在乐器中(我也进行了此测试)它被卡在60 fps上!

所以,总结一下:有时我会得到真正的60 fps的块动画,没有跑步的起伏,有些时候我得到假的60 fps,没有起伏.

你对此有什么解决方案吗?所有测试均在带有iOS 5.1的iPad 2和iPhone 3GS上进行

iphone animation opengl-es quartz-graphics uikit

8
推荐指数
1
解决办法
1812
查看次数

无法与转换的html元素进行交互

这件事让我很生气!

我在html页面中的另一个div内部以编程方式创建绝对定位的div.外部div为mousedown和touchstart事件注册,内部div使用css3过渡开始移动.

所有转换都会影响-WebKit-transform属性.

一切正常,除了事件处理:在Chrome和Safari中,所有事件都在外部div事件处理程序中捕获,但事件的目标属性很少是我点击的div!

当div完成它的转换时,事件目标始终是正确的,但不是在div转换时.这是一个错误??? 我错过了什么吗?

更新:

以下示例与safari和chrome兼容

这是一个解决问题的在线示例:http://jsfiddle.net/qfn7F/4/

球体从屏幕顶部产生并朝向底部移动.当用户单击球体(mousedown事件)时,单击的球体必须从屏幕上消失.

以下是处理与球体交互的代码:

container.addEventListener(onSelect, function() {
    if (event.target.classList.contains("transition")) {
        var tDiv = event.target;
        var box = tDiv.getBoundingClientRect();
        var durationEase = "0.25s linear";
        tDiv.style.pointerEvents = "none";
        tDiv.style.webkitTransform = "translate3d(" + box.left + "px," + box.top + "px, 1px)";
        tDiv.style.opacity = 0;
        tDiv.style.webkitTransition = "opacity " + durationEase;
    }
    event.preventDefault();
    event.stopPropagation();
}, false);
Run Code Online (Sandbox Code Playgroud)

但事件的目标是RARELY用户点击的球体,因此球体不会以一致的方式从屏幕上消失.

如果球体到达屏幕底部,即转换结束,则单击事件将100%运行.

javascript html5 transition javascript-events css3

5
推荐指数
1
解决办法
173
查看次数

互操作 MTKView (MetalKit) 和 SceneKit

我正在使用 MetalKit 并且有一个复杂的渲染管道。结果呈现为MTKView.

现在我想将 的内容提供MTKView给 aSCNScene并使用 aSCNCamera来执行 HDR 等后期处理效果。

这怎么可能?

我不需要一般性的指导。如果可能的话,我想要具体的电话。

scenekit metal metalkit scnscene mtkview

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