iphone - 在 iOS 上使用 Cocoa 在后台进行 9 切片缩放/拉伸(stretch)

标签 iphone ios cocoa-touch ipad

我想使用“9 切片”缩放来拉伸(stretch)图像,其中仅缩放图像的中心。完全像 UIImage 的 stretchableImageWithLeftCapWidth方法,但是我想在后台线程中执行此操作。我明白这个方法只能在gui线程中使用。

我正在 iOS/iPad/iPhone 上开发。

有没有人有代码片段,或者知道可以执行此操作的库?我不想重新发明轮子!

一些我发现有用的相关引用资料:

CGContext 文档:

关于在后台绘制的不错的博客条目:

使用 CGContext 旋转图像:

最佳答案

从 iOS 4 开始,UIKit 的某些部分是线程安全的;我相信 UIGraphics 函数和 UIImage 绘图应该可以工作。

如果你需要支持 iOS 3,那就有点困难了。如果你想完全避免 UIKit(可能是明智的),那么你需要将 CGImageRef 传递给后台线程。您可能还需要担心其他事情;我假设 scale 为 1,imageOrientation 为纵向。

  1. 创建上下文:CGBitmapContextCreate()
  2. 创建您的子图像:CGImageCreateWithImageInRect()
  3. 将每个子图像绘制到正确的位置:CGContextDrawImage()
  4. 从上下文中获取图像:CGBitmapContextCreateImage()
  5. 释放必要的东西并将 CGImageRef 返回给主线程。
  6. 在主线程中,使用 +[UIImage imageWithCGImage:]+imageWithCGImage:scale:orientation:(请注意,在后一种情况下,只有比例为 2 的图像似乎支持纵向;我不确定为什么)。

另请注意,将图像粘贴在 UIImageView 中并适当设置 contentStretch 会好得多,因为这样缩放是在 GPU 上完成的。

关于iphone - 在 iOS 上使用 Cocoa 在后台进行 9 切片缩放/拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386451/

相关文章:

ios - sigabrt 错误在 Swift 中以编程方式调用 segue

ios - 如何让对象对 Cocos2D 中的触摸使用react?

ios - 旋转后如何禁用 iOS 5.1.1 中方向的更改?

ios - 搜索字典数组的简便方法

ios - 如何将url中的数据发送到服务器?

iphone - 如何在iPhone SDK中为pickerview设置setInputAccessoryView

ios - 在每个 View Controller 中处理远程控制事件

ios - 与 AFNetworking 集成时出现问题

iphone - 保存 UIPicker 中选择的值的最佳方法?

iphone - 是返回 @"Text";自动发布?