UIApplication sharedApplication keyWindow - iOS App Widget

UIApplication sharedApplication keyWindow - iOS App Widget

我有一个简单的应用程序和小部件 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 is unavailable: not available on iOS (App Extension) - Use view controller based solutions where appropriate instead.

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

谢谢,丹。

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

尝试使用 snapshotVieAfterScreenUpdates 方法

[self.myViewToConvertToImage snapshotViewAfterScreenUpdates:YES];

这个 returns 一个 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;
}