0

我有一个适用于 iOS 8 的简单应用程序和小部件。我正在使用 UIImage+ImageEffects 源文件。该库中的一个函数称为“convertViewToImage”,其中包含以下代码:

+ (UIImage *)convertViewToImage
{
    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
    CGRect rect = [keyWindow bounds];
    UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0f);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [keyWindow.layer renderInContext:context];
    UIImage *capturedScreen = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return capturedScreen;
}

但是,在编译应用程序扩展时,该方法的第一行给我们带来了错误。

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

出现以下错误:

sharedApplicaion 不可用:在 iOS 上不可用(应用程序扩展) - 在适当的情况下使用基于视图控制器的解决方案。

有谁知道我该如何解决这个问题?

谢谢,丹。

4

1 回答 1

1

因此,您无法访问扩展中的共享应用程序。所以这里有一些不同的方法来实现你想要的。

尝试使用 snapshotVieAfterScreenUpdates 方法

[self.myViewToConvertToImage snapshotViewAfterScreenUpdates:YES];

这将返回一个 UIView,它是复杂视图的快照。

或者,如果您在 UIImage 之后进行一些处理

尝试

- (UIImage *)imageFromView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}
于 2015-04-14T06:32:57.323 回答