相关疑难解决方法(0)

裁剪UIImage

我有一些调整图像大小的代码,所以我可以获得图像中心的缩放块 - 我使用它来获取UIImage并返回图像的小方形表示,类似于在专辑视图中看到的照片应用程序.(我知道我可以使用a UIImageView并调整裁剪模式以获得相同的结果,但这些图像有时会显示在中UIWebViews).

我已经开始注意到这段代码中的一些崩溃,我有点难过.我有两种不同的理论,我想知道是否有基础.

理论1)我通过绘制到目标大小的屏幕外图像上下文来实现裁剪.由于我想要图像的中心部分,我设置CGRect传递给的参数drawInRect大于我的图像上下文边界的东西.我希望这是犹太洁食,但我是否试图汲取我不应该触及的其他记忆?

理论2)我在后台线程中做了所有这些.我知道UIKit的部分内容仅限于主线程.我假设/希望绘制到屏幕外的视图不是其中之一.我错了吗?

(哦,我多么想念NSImage's drawInRect:fromRect:operation:fraction:方法.)

cocoa-touch image-manipulation objective-c uiimagepickercontroller ios

206
推荐指数
11
解决办法
17万
查看次数

为什么我在iOS 7上以编程方式创建的屏幕截图看起来如此糟糕?

我正在尝试与Facebook实现共享应用程序.我使用此代码截取屏幕截图:

CGSize imageSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height);
UIGraphicsBeginImageContext(imageSize);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)

它在iOS 6上运行良好,但在iOS 7中,图像看起来很糟糕.我使用了这个答案:iOS:以编程方式制作屏幕截图的最快,最高效的方法是什么? 试图解决它,它有帮助,仍然截图看起来很糟糕.屏幕获得另一种颜色,并且在拍摄的图像上没有显示某些对象(如标签).有帮助吗?

---- ----更新

我设法解决了大多数对象,通过改变它们来保留而不是弱.我的主要问题仍然是我的tableview,显示为一个大的白色块(它应该是透明的,带有白色文本的标签,所以我们看到的只是白色单元格).我确实尝试将表格背景定义为clearcolor,没有帮助..

- - 最后更新 - -

这里有很好的答案,并不是真的与我的问题有关..我想让它在iOS7上运行但不使用iOS7 SDK的设备上运行,因为在这一点上,当项目切换项目SDK需要花费很多精力差不多完成了.

无论如何,我添加了最终解决了我的问题的代码的和平:

这个改变只是解决了这个问题:

UIGraphicsBeginImageContextWithOptions(imageSize, NO , 0.0f);
Run Code Online (Sandbox Code Playgroud)

代替:

UIGraphicsBeginImageContext(imageSize);
Run Code Online (Sandbox Code Playgroud)

iphone xcode screenshot objective-c ios

29
推荐指数
4
解决办法
4万
查看次数

iPad 3 renderInContext慢 - 渲染性能不佳

我试图从用户可以绘制的视图中获取图像,或者添加一些其他视图.iPad1和iPad到目前为止一切正常.但在iPad3上它像狗一样运行.我只是使用图层renderInContext方法.

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
    UIGraphicsBeginImageContextWithOptions(self.viewDrawableViewContainer.frame.size, NO, [UIScreen mainScreen].scale);
else
    UIGraphicsBeginImageContext(self.viewDrawableViewContainer.frame.size);
[self.viewDrawableViewContainer.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();   
Run Code Online (Sandbox Code Playgroud)

我知道这可能是由cpu引起的,它等于ipad2,但需要大约1秒钟.用户绘制或添加的越多,渲染所需的时间就越长.有时长达5秒,这是非常不可接受的.那么有什么选择来提高性能吗?有可能设置较小的渲染质量 - 我不需要在最高视网膜分辨率下渲染......

我将不胜感激任何帮助!提前致谢

iphone ipad ios ipad-3

6
推荐指数
2
解决办法
4005
查看次数

如何拍摄整个视图的iPhone屏幕截图,包括屏幕外的部分?

我有一个使用UITableView布局的应用程序.界面占用的不仅仅是屏幕,因此可以滚动到某些区域.我想要一些用于文档和征求客户反馈的整个视图(包括不可见区域)的截图.

是否有编程方式来获取整个视图的图像?我不认为设备上会有这样的方法,但也许有.

iphone cocoa-touch objective-c uitableview

5
推荐指数
1
解决办法
8820
查看次数

iOS7的drawViewHierarchyInRect不起作用?

根据我的阅读,iOS7的新drawViewHierarchyInRect应该比CALayer的renderInContext更快.根据这个这个,它应该是一个简单的问题:

[myView drawViewHierarchyInRect:myView.frame afterScreenUpdates:YES];
Run Code Online (Sandbox Code Playgroud)

代替

[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这个时,我只是得到空白的图像.执行捕获的完整代码,其中"self"是UIView的子类,

        // YES = opaque. Ignores alpha channel, so less memory is used.
        // This method for some reasons renders the
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, YES, self.window.screen.scale);    // Still slow.

    if ( [AIMAppDelegate isOniOS7OrNewer] )
        [self drawViewHierarchyInRect:self.frame afterScreenUpdates:YES]; // Doesn't work!
    else
        [self.layer renderInContext:UIGraphicsGetCurrentContext()];     // Works!

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    contentImageView.image = image; // this is empty if done using iOS7's way
Run Code Online (Sandbox Code Playgroud)

和contentImageView是一个UIImageView,在初始化期间作为子视图添加到self.

此外,我想要在图像中捕获的图形包含在其他子视图中,这些子视图在初始化期间也作为子视图添加到self(包括contentImageView).

使用drawViewHierarchyInRect时为什么会失败的任何想法?

*更新*

如果我绘制特定的子视图,我会得到一个图像,例如: …

graphics ipad ios7

5
推荐指数
1
解决办法
7243
查看次数