【问题标题】:UIApplication sharedApplication keyWindow - iOS App WidgetUIApplication sharedApplication keyWindow - iOS App Widget
【发布时间】:2015-04-14 05:56:01
【问题描述】:

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

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

谢谢,丹。

【问题讨论】:

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


    【解决方案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;
    }
    

    【讨论】:

    • 感谢您的帮助:)
    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多