我使用 Sprite Kit 在 iPad 上编写了一个简单的 2D 动画应用程序。此应用程序唯一困难的部分是使用计算出的多边形(阴影)裁剪图像(.png)。经过调查,在我看来,实现此目的的唯一方法是使用 UIImage 和 UIBezier 路径(注意:我的路径不需要 Bezier 路径的全部功能,一个简单的 CGPath 将适用于我的情况。)。我编写了以下方法来完成此剪辑:
- (UIImage *) maskImage: (UIImage *)originalImage toPath: (UIBezierPath *)path
{
UIGraphicsBeginImageContextWithOptions (originalImage.size, NO, 0.0f);
[path addClip];
[originalImage drawAtPoint: CGPointZero];
UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext ();
UIGraphicsEndImageContext ();
return maskedImage;
}
此操作的结果最终传递给:
SKSpriteNode *node = [SKSpriteNode spriteNodeWithTexture: [SKTexture textureWithImage: [self buildShadowMask]]];
当使用 iOS 模拟器执行此代码时,它运行得非常快,实际上是实时的。但是,当我在实际的 iPad(iPad Air 或 iPad 4G)上运行它时,它的运行速度非常慢。所以,我的问题是:为什么这种裁剪图像的方法在实际 iPad 设备上如此缓慢?无论如何剪辑图像(使用简单路径)会更快吗?这是 UIGraphicsContext 或 Sprite 或两者都有问题吗?我将非常感谢任何人可以给我的任何建议或指导。非常感谢!