- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我对 UIGraphicsBeginImageContextWithOptions
和线程有点困惑,因为根据 UIKit Function Reference UIGraphicsBeginImageContextWithOptions
应该只在主线程上调用。当被调用时,它会创建一个基于位图的上下文,可以使用 CoreGraphics 的函数或类似 -drawInRect:
for UIImage
, -drawInRect 的方法对其进行操作:withFont:
用于 NSString
等等。对于 CoreGraphics 的绘图,一切都很清楚——您将一个正在被操作的 CGContextRef 参数传递给每个函数,但 UIKit 绘图方法使用堆栈中的当前上下文。在 What's New in iOS 4.0 的发行说明中上面写着
Drawing to a graphics context in UIKit is now thread-safe. Specifically:
- The routines used to access and manipulate the graphics
context can now correctly handle contexts residing on different threads.
- String and image drawing is now thread-safe.
- Using color and font objects in multiple threads is now safe to do.
到目前为止一切顺利。有趣的是,我有一个项目,我在其中进行了一些密集的绘图,并通过使用 UIGraphicsBeginImageContextWithOptions
创建上下文来创建多个图像,但是当这些操作碰巧更耗时时,我只是移动了绘图在后台线程中,准备就绪后将它们与一些动画一起显示在屏幕上,一切正常 - 没有崩溃,没有泄漏。图像按预期绘制,似乎 UIGraphicsBeginImageContextWithOptions
为后台线程创建了一个上下文,一切似乎都很好。
所以我的问题是:
- 为什么有必要仅在主线程上调用 UIGraphicsBeginImageContextWithOptions
,因为它在后台似乎工作正常?
- 如何使用 UIImage
的 -drawInRect:
方法,例如,在后台线程中,我没有当前上下文,而且我似乎无法创建一个,因为我不能在那里调用 UIGraphicsBeginImageContextWithOptions
?
- 使用 UIKit 的方法处理背景图像的正确方法是什么(我知道我也可以使用 CGBitmapContextCreate
,但它既不会将创建的上下文推送到上下文堆栈中,我似乎也无法自己完成为了使用 -drawInRect:
UIImage
) 的方法?
最佳答案
所以,经过几天的调查,为什么操作 UIKit 上下文是线程安全的,但你似乎无法在除主线程之外的线程中创建一个,因为 UIGraphicsBeginImageContextWithOptions
“应该只在主线程上调用”,但仍然可以很好地工作,在阅读了一些关于这个主题的小帖子并与苹果开发者论坛上的其他人讨论后,我可以清楚地说明文档中所说的内容关于 UIGraphicsBeginImageContextWithOptions
、UIGraphicsPushContext
和 UIGraphicsPopContext
是WRONG 并且可以在另一个线程中调用这些方法并使用上下文,而无需问题。所以 UIGraphicsBeginImageContextWithOptions
、UIGraphicsPushContext
和 UIGraphicsPopContext
是线程安全的。
关于ios - UIGraphicsBeginImageContextWithOptions 和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10931155/
所以我有一个函数可以拍摄两张图像并将它们组合起来。也许图像太大,因为当我尝试使用 2 个较小的图像时,效果很好,但我不确定。所以我用相机拍了一张照片,然后尝试从相册中打开它。我选择图像并使用此函数将其
我正在努力适应THIS问题与视网膜显示器一起使用。以下是我如何弄清楚如何使用 UIGraphicsBeginImageContext 的视网膜图形。 if (UIGraphicsBeginImageC
我只是进行签名并使用 imageMask 进行保存。实际上,imageMask 渲染正确,但主签名行为异常,如其中的 2 行。这是我的代码。 UIGraphicsBeginImageContextWi
在使用 UIGraphicsBeginImageContextWithOptions 截屏时,是否有隐藏特定按钮(IBAction)的方法? 我正在使用下面的代码: // Define the di
我有这行代码来截取 uiview 的屏幕截图: - (UIImage *)imageWithView:(UIView *)view { UIImage *viewImage = nil
一段时间以来,我一直在努力使用这种方法。我正在另一张图片上绘制头像。用户图片我想成为一个圆圈,但我似乎无法弄清楚如何。用户图片是 UIImage 而不是 UIImageView。如果它是 ImageV
我使用下面的函数来渲染图像,但返回的图像底部有不需要的边框。 public func renderTextOnView(view: UIView) -> UIImage? { UIGraphi
我对 UIGraphicsBeginImageContextWithOptions 和线程有点困惑,因为根据 UIKit Function Reference UIGraphicsBeginImage
在我正在开发的应用程序中,客户输入一些个人信息并在屏幕上的一个框中签名。然后我以编程方式截取完整 View 并将其转换为 base64。 这工作正常,但是,由于图像的大小,将其转换为 base64 并
问题 我正在使用 UIGraphicsBeginImageContextWithOptions 将屏幕截图保存到 UIImage 中。虽然这有效,但生成的 UIImage 缺少任何阴影和渐变。 如何让
我需要绘制这样的图像 提供的是:带向下箭头图像的绿色气泡(绿色气泡图像已经有边框,所以我不需要绘制它)和中心照片。我需要在照片周围绘制白色边框 + 圆角这是我到目前为止的代码: let rect =
我正在开发 iOS 应用程序。它目前仅适用于 iOS 4,因为我多次使用以下方法:“UIGraphicsBeginImageContextWithOptions”。此方法仅在 iOS 4 中可用,因此
我正在我的 SKScene 中绘制一条路径以显示我的对象的轨迹。一切正常,我可以绘制所有点的路径并将其添加到场景中。当我尝试打印我的场景时,问题发生了,除了路径之外的所有内容都出现了。我哪里做错了?
我正在使用 SDWebImage 下载缩略图。在使用 - (UIImage *)imageManager:(SDWebImageManager *)imageManager transformDown
我有一个函数 UIGraphicsBeginImageWithContextWithOptions()和 UIGraphicsEndImageContext( ,但该函数已经传递了一个名为“conte
所以我有这段代码来创建一个 UIImage: UIGraphicsBeginImageContextWithOptions(border.frame.size, YES, 0); [border.la
我正在寻找一种解决方案来将 UIView(及其 subview )保存为图像到设备照片库。我希望输出图像的大小为 1024 x 1024。UIView 将始终是一个正方形,因此 subview 将适合
使用此类方法并创建纯色 UIImage 会比创建纯色 png 更快吗? + (UIImage*) imageWithColor:(UIColor*)color size:(CGSize)size {
在绘制到屏幕外缓冲区时,我很难让 Image Insets 正常工作。 在 UIImage 上直接使用 resizableImageWithCapInsets: setImage: into a bu
我曾经使用以下代码调整图像大小,它过去在比例因子方面工作得很好。现在使用 Swift 3 我无法弄清楚为什么不考虑比例因子。图像已调整大小但未应用比例因子。你知道为什么吗? let layer = s
我是一名优秀的程序员,十分优秀!