Core Graphics的性能问题

时间:2013-05-07 06:32:50

标签: ios performance drawing core-graphics

我的游戏中存在严重的性能问题。我正在开发一款拼图益智游戏。我将图像缩小为较小的图像,为每个拼图创建一个UIView,并将每个图像分配到它自己的UIView的CALayer中。

然后我为形状创建随机UIBezier路径作为蒙版并将它们分配到CAShapeLayers中,然后将形状图层分配给我的UIView.layer.mask属性。

当我尝试移动拼图时,这一切都像一个魅力。我检测到触摸并移动相应的部件的中心属性(CGPoint)。

但是,当我将一件物品移到其他物品上时,它太慢而且“迟滞”。

我google了很多,尝试调用setNeedsDisplayInRect:我的容器视图等。 我还发现,这些方法重绘整个事物,我不需要重绘,我只需要移动碎片。而且我发现动画是一种很好的方法,因为它使用了在OpenGL上构建的方法。所以我尝试在我的拼图块对象(UIView的子类)中使用UIView类方法动画(移动)碎片:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self.superview];
CGPoint offset = CGPointMake(touchLocation.x - _previousPoint.x, touchLocation.y - _previousPoint.y);
[UIView animateWithDuration:0
                 animations:^(void){
                     self.center = CGPointMake(self.center.x + offset.x, self.center.y + offset.y);
                 }
                 completion:^(BOOL finished){

                 }];
_previousPoint = touchLocation;   
}

但它也没有做到这一点。

有没有人知道如何提高性能?

我仍然认为“仅移动”方法将是解决方案(不重绘每一帧,因为重绘非常昂贵)。但我不知道如何实现这一点。

任何想法都会非常感谢,提前感谢。

0 个答案:

没有答案