只是玩弄SpriteKit,试图弄清楚如何将SKNode的“抓取”捕获到UIImage中。
对于UIView(或UIView子类),我使用layer
了视图的属性来渲染到图形上下文中。
例如。
#import <QuartzCore/QuartzCore.h>
+ (UIImage *)imageOfView:(UIView *)view {
UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context];
UIImage *viewShot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewShot;
}
SKNode不是UIView的子类,因此似乎没有层的支持。
关于如何将给定的SKNode渲染到UIImage的任何想法?
这将捕获整个场景:
CGRect bounds = self.scene.view.bounds;
UIGraphicsBeginImageContextWithOptions(bounds.size, NO, [UIScreen mainScreen].scale);
[self drawViewHierarchyInRect:bounds afterScreenUpdates:YES];
UIImage* screenshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
如果只需要特定的节点分支,则可以在截屏之前隐藏所有不想捕获的节点。您还可以使用转换为UIKit
坐标的累积框架仅捕获节点及其所涉及的子节点的区域。
或者,您可以SKTexture
从节点层次结构的特定部分获取一个:
SKTexture* tex = [self.scene.view textureFromNode:yourNode];
在iOS 9之前,无法将转换SKTexture
回UIImage
。现在,这很简单:
UIImage *image = [UIImage imageWithCGImage:tex.CGImage];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句