首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIApplication sharedApplication keyWindow - iOS应用程序Widget

UIApplication sharedApplication keyWindow - iOS应用程序Widget
EN

Stack Overflow用户
提问于 2015-04-14 05:56:01
回答 1查看 926关注 0票数 0

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

代码语言:javascript
复制
+ (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 (应用程序扩展)上不可用--酌情使用基于视图控制器的解决方案。

有人知道我该怎么解决这个问题吗?

谢谢丹。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-14 06:32:57

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

尝试使用snapshotVieAfterScreenUpdates方法

代码语言:javascript
复制
[self.myViewToConvertToImage snapshotViewAfterScreenUpdates:YES];

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

或者,如果您在UIImage之后做了一些处理

试一试

代码语言:javascript
复制
- (UIImage *)imageFromView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29620093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档