2010-01-08 31 views
1

我遇到性能问题。如何使用性能动画多边形蒙版?

我创建了一个UIView并覆盖它的drawRect函数。在这个函数中,我正在绘制一个图像(大的图像),并且在整个屏幕上有一个白色正方形,里面有一个多边形,带有CGContextEOFillPath。结果是显示部分图像(由多边形定义)的白色屏幕。

之后,我创建了一个函数来为该多边形的过渡设置另一个。除了多边形动画之外,还应该缩放图像并移动以修复屏幕上的显示。我用NSTimer做了这个。多边形的动画包括计算每个顶点之间的距离,然后根据elapsedTime移动到一个位置。它在模拟器上工作得很好,但是在设备上真的很困难。

阅读关于性能,在这里在stackoverflow,我发现替代使用beginAnimations和commitAnimations。我正在改变一切,在图像上使用这种方法。但是我能用多边形做什么。多边形是用CGContextMoveToPoint和CGContextAddLineToPoint绘制的,所以我相信它不能用beginAnimations动画。我正确吗?有没有更好的方法来做到这一点?

期望的结果是这样的漫画阅读器应用程序:(点击导游在他们表现出视频中的“自动屏蔽”功能的中间)http://www.comixology.com/iphoneapp

回答

0

我的建议是使用CAShapeLayer覆盖在你的主图像视图,与CAShapeLayer是要掩盖视图的大小并具有多边形路径在它的中心有一个洞。 CAShapeLayers可让您从一个CGPathRef动画到另一个,只要两条路径具有相同数量的控制点。你需要在这里使用CABasicAnimation来做动画,而不是UIView的begin/commitAnimations块,但这并不难。

Joe Ricioppo在他的帖子here中有一个很好的动画CAShapeLayer路径的例子。

+0

谢谢,我会先尝试这种方法,如果我没有成功,我会给阿德里安的一个尝试。之后我讨厌答案,好吗?再次感谢! –

0

随着核心动画,你可以动画“动画” (原文如此)属性。苹果公司的文件列举了Mac OS X的动画属性:

http://url.akosma.com/55

在iPhone的情况下,UIView的文件明确表示,“动画”当一个属性是,哼哼,动画。其中最强大的是(IMHO)UIView的“transform”属性,它将CGAffineTransform结构作为输入,或者CALayer的“transform”属性(它采用CATransform3D结构)。两者都具有动画效果,并为您创建任何想要的转换提供了巨大的动力。

现在,您的情况的确如此,您不能以“简单”的方式对多边形进行动画处理。我敢打赌,试图映射符合您的需求的CGAffineTransforms(缩放,翻译)并将其应用于使用Quartz代码创建的非动画固定视图。

我希望我足够清晰的:)