用scale参数解决iOS图片模糊问题

用scale参数解决iOS图片模糊问题

iOS开发资源用到的图片有一倍图、二倍图(@2x)和三倍图(@3x, 主要是plus系列)。
程序资源包中的资源使用时,系统会自动适配屏幕分辨率,采用合适的图片或缩放需要的图片。
但是当在程序运行中动态生成的图片则有可能会模糊。
这主要是没有充分利用scale参数导致的。

常见的图片生成函数有

1
2
3
4
5
6
7
8
9
10
11
public init?(data: NSData)
@available(iOS 6.0, *)
public init?(data: NSData, scale: CGFloat)
public init(CGImage cgImage: CGImage)
@available(iOS 4.0, *)
public init(CGImage cgImage: CGImage, scale: CGFloat, orientation: UIImageOrientation)

@available(iOS 5.0, *)
public init(CIImage ciImage: CIImage)
@available(iOS 6.0, *)
public init(CIImage ciImage: CIImage, scale: CGFloat, orientation: UIImageOrientation)

每个初始化方法都有对应的scale参数版本
可以通过

1
UIScreen.mainScreen().scale

获取屏幕的scale值。

创建图片时使用scale参数

1
2
3
public func UIGraphicsBeginImageContext(size: CGSize)
@available(iOS 4.0, *)
public func UIGraphicsBeginImageContextWithOptions(size: CGSize, _ opaque: Bool, _ scale: CGFloat)

使用第二个版本的CGContext创建方法来创建屏幕上显示清晰的图片。