UIApplication sharedApplication keyWindow - iOS App Widget

时间:2015-04-14 05:56:02

标签: ios objective-c cocoa-touch uiapplication keywindow

我有一个简单的应用程序和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上不可用(应用扩展程序) - 请在适当情况下使用基于视图控制器的解决方案。

有谁知道如何解决此问题?

谢谢,Dan。

1 个答案:

答案 0 :(得分: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;
}
相关问题