基本上,我正在寻找一种从XIB附加自定义UIView的方法,以便它可以用作UILabel中的链接预览。我选择将UIView转换为UIImage,因为图像可以在NSTextAttachment中使用,后者又可以在NSAttributedString中使用。
我正试图从这个UIView获取图像。代码如下:
UIView *preView = [[[NSBundle bundleForClass:[self class]] loadNibNamed:@"LinkPreview" owner:self options:nil] firstObject];
//preView contains 3 labels and 1 imageview with hardcoded values for testing
if(preView)
{
preView.bounds = CGRectMake(0,0,400,200);
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [preView snapShot];
.
.
}
方法snapShot在UIView类别中定义:
#import "UIView+Snapshot.h"
#import <QuartzCore/QuartzCore.h>
@implementation UIView (Snapshot)
-(UIImage *)snapShot
{
UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 0.0f);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage * snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return snapshotImage;
}
@end
此代码返回带有黑色背景的空图像。
更新1 :preView很好
请帮忙。
答案 0 :(得分:0)
您的视图尚未添加到视图层次结构中。意味着它尚未渲染。因此,您将获得黑色图像。
仅出于测试目的,将其添加为当前视图的子视图,然后再创建快照。它肯定会奏效。
更新:
如果您需要快照而不将其添加到层次结构中,请尝试以下
-(UIImage *)snapShot
{
UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, 0.0f);
[self.layer renderInContext: UIGraphicsGetCurrentContext()];
UIImage * snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return snapshotImage;
}