UIImage学习笔记

  1. UIImage是什么
    用来管理APP里的图片资源,可以用来表示设备支持的图片资源,不仅仅是jpg和png。 UIImage是immutable的,因此也是线程安全的。
  2. iOS支持的所有的图片格式
    链接 不过,对于gif格式,只能展示第一帧。需要把gif分成若干帧,分别展示。
  3. iOS本身的图片缓存系统
    iOS本身有一个图像缓存系统。系统在内存不够使,会清除缓存中的一些内容。
    使用init(named:in:compatibleWith:)方法生成的image被加入到了系统缓存中去。因此适合于创建频繁使用的图片。这个方法在iOS9以后是线程安全的。
    使用imageWithContentsOfFile:的方法创建的image没有被加入系统缓存中去,每次调用都会重新载入图片。
  4. 如何比较两张图片的数据是否一致。
    由于图像存在缓存系统,因此唯一可以比较图片数据是否相同的方法是isEqual(_:)方法,这个方法比较真实的图片数据。
  5. 从UIImage获取图像的其他表示方法
    • cgImage属性,在Core Graphics框架内。
    • ciImage属性,在Core Image框架内
    • UIImagePNGRepresentation(_:), png格式的数据
    • UIImageJPEGRepresentation(_:_:), jpg格式的数据
  6. 图片的方向
  7. 图片的size
    以point度量的图片的大小
  8. 图片的scale
    物理像素和逻辑像素的比值。size*scale就是以像素度量的图片大小。
  9. 展示一系列图片
    UIImage可以展示一些列图片,得到类似gif的图片效果。这些图片应该有相同的size和scale

    • 通过UIImage数组生成
    class func animatedImage(with images: [UIImage], duration: TimeInterval) -> UIImage?
    
    class func animatedResizableImageNamed(_ name: String, capInsets: UIEdgeInsets, duration: TimeInterval) -> UIImage?
    
    • 通过路径生成
    class func animatedImageNamed(_ name: String, duration: TimeInterval) -> UIImage?
    class func animatedResizableImageNamed(_ name: String, capInsets: UIEdgeInsets, resizingMode: UIImageResizingMode, duration: TimeInterval) -> UIImage?
    

    其中,name是图片路径的前缀。