UIApplication sharedApplication keyWindow - iOS App Widget

Posted

技术标签:

【中文标题】UIApplication 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 上不可用(应用程序扩展) - 在适当的情况下使用基于视图控制器的解决方案。

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

谢谢,丹。

【问题讨论】:

【参考方案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;

【讨论】:

感谢您的帮助:)

以上是关于UIApplication sharedApplication keyWindow - iOS App Widget的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式为特定视图控制器禁用/启用睡眠模式?

iOS大神班笔记03-UIApplication

iOS-UIApplication详解

UIApplication的详细介绍

程序启动原理和UIApplication

1230ios准备 --UIApplication类