帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:PERF  apng  APN  格式  性能  DEL  for  play  
High performance and delightful way to play with APNG format in iOS

  • 源代码名称:APNGKit
  • 源代码网址:http://www.github.com/onevcat/APNGKit
  • APNGKit源代码文档
  • APNGKit源代码下载
  • Git URL:
    git://www.github.com/onevcat/APNGKit.git
  • Git Clone代码到本地:
    git clone http://www.github.com/onevcat/APNGKit
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/onevcat/APNGKit
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • APNGKit

    APNGKit是用于在iOS和 macOS 中加载和显示APNG图像的高性能框架。 它构建在修改版本的之上,带有APNG支持和 Swift 编写。 高级的Cocoa Touch 抽象用于一个令人愉快的API。 因为如这里,当使用APNGKit在APNG格式中播放图像时,你会感到非常感兴趣。

    APNG,什么和为什么?

    这个动画可移植网络图形( APNG ) 是一个扩展了已知PNG格式的文件格式。 它允许动画PNG文件类似于动画GIF文件,同时支持 24-bit 图像和 8-bit 透明度不可以用。 这意味着动画质量要好得多。 同时,文件大小可以比小于或者小于,如果创建了 gif,。

    谈话很便宜;给我看图像。 你可以单击该图像,以查看动画时的外观。

    APNGKit Demo

    很酷APNG好得多 ! 但是等下。我为什么还没有听说过 APNG? 这不是一种流行的格式,所以我为什么要在我的下一代 ios/macOS 应用程序中使用它?

    很好APNG是普通PNG的优秀扩展,而且使用起来非常简单,而且与当前的PNG标准( 该软件包括标准PNG头,所以如果平台不支持 APNG,它将被识别为普通 PNG,它的第一帧显示为 static 图像。) 不冲突。 但不幸的是,它是一个叛逆者格式,所以它不被PNG组接受。 然而,许多供应商都接受它,甚至在 W3C标准版中也提到了它。 还有另一种名为 MNG ( 多图像网络图形)的格式,它由与PNG相同的团队创建。 它是一种综合格式,但非常非常( 重要的事要说三遍) 复杂。 它非常复杂,尽管它是一个"标准",但它几乎是普遍被拒绝的。 目前只有一个名为 Konqueror的"热门"浏览器支持 MNG,这是一个非常悲伤但又很合理的故事。

    即使APNG目前不被接受,我们仍然会看到它的广泛实现。 苹果最近在桌面和 Mobile Safari 平台上都支持 APNG。 微软微软 Edge 和 Chrome 也在考虑添加APNG支持,因为它已经正式加入了webkit 内核。

    APNG是一种很好的格式,可以让用户更好地体验图像。 使用的APNG越多,识别和支持就越多。 不仅在浏览器世界中,而且在我们一直喜爱的应用中。 这就是我创建这个框架的原因。

    安装

    需求

    iOS 8.0 +/macOS 10.10 +

    尽管它是用 Swift 编写的,但也考虑了与 objective-c的兼容性。

    ( 1.x ) 9 ( Swift 3.2或者 Swift 4 ) 支持的最新版本。 如果你仍然使用 Xcode 8,请尝试版本 0.6.4

    CocoaPods

    CocoaPods 是 Cocoa 项目的依赖项管理器。

    CocoaPods 0.36为 Swift 和嵌入式框架添加支持。 你可以使用以下命令安装它:

    $ gem install cocoapods

    要使用CocoaPods将APNGKit集成到你的Xcode项目中,请在你的Podfile 中指定它:

    source 'https://github.com/CocoaPods/Specs.git'platform :ios, '8.0'use_frameworks!
    target 'your_app'do pod 'APNGKit', '~> 1.0'end

    然后,运行以下命令:

    $ pod install

    你应该打开 {Project}.xcworkspace,而不是在安装任何CocoaPods之后打开 {Project}.xcodeproj

    关于如何使用CocoaPods的更多信息,我建议你使用本教程中的。

    Carthage

    Carthage 是 Cocoa 应用程序的分散依赖管理器。 要安装carthage工具,你可以使用 Homebrew 命令。

    $ brew update
    $ brew install carthage

    要使用Carthage将APNGKit集成到你的Xcode项目中,请在你的Cartfile 中指定它:

    
    github"onevcat/APNGKit" ~> 1.0
    
    
    
    

    然后,运行下面的命令来构建APNGKit框架:

    $ carthage update

    最后,你需要手动设置Xcode项目以添加APNGKit框架。

    在应用程序目标'"通用"设置选项卡,在"链接框架和库"部分,拖放每个要从磁盘上的carthage/build文件夹使用的框架。

    在应用程序目标'"生成阶段"设置选项卡中,单击"+"icon 并选择"新运行脚本阶段"。 使用以下内容创建运行脚本:

    /usr/local/bin/carthage copy-frameworks

    然后将路径添加到你希望在"输入文件"下面使用的框架:

    $(SRCROOT)/Carthage/Build/iOS/APNGKit.framework

    有关如何使用Carthage的详细信息,请参阅它的项目页面

    手动

    不建议手动安装框架,但是可以使用APNGKit为部署目标低于 7.0. 你可以从发布页面下载最新的软件包,把所有的东西放到你的项目里。 然后需要创建桥接头文件并将它的添加到其中:

    #import"png.h"

    你可以在这里找到有关如何添加桥头的更多信息。

    然后你需要在构建阶段的"将二进制链接到库"部分中添加" libz.tbd"。 现在APNGKit应该在没有问题的情况下。

    如果你使用的是 Swift,只需跳过下面的内容到"用法"。 如果要在 objective-c 代码中使用 APNGKit,还必须检查项目的这些设置:

    • 产品模块名称:应该是你的目标应用程序名
    • 定义模块:是
    • 嵌入内容包含 Swift: 是
    • 安装 objective-c 兼容性标头:是

    最后,在要使用APNGKit的. m 文件中导入伞头文件:

    #import"{YOUR_APP_MODULE_NAME}-Swift.h"

    现在你可以在 objective-c 中使用 APNGKit。 ummm。有点复杂不是? 生活很短,让我们来 !

    有关使用 Swift 混合 objective-c/c 或者反之的更多信息,你可以从苹果的文档中找到一些有用的信息。

    用法

    你可以在 CocoaDocs 找到完整的API文档。

    基本

    在你希望使用框架的源文件中导入 APNGKit。

    importAPNGKit

    APNGKit使用类似于 UIImageUIImageView的类似 api。 一般来说,你可以按照 Cocoa Touch 中使用图像的方式来使用这个框架。 唯一的区别是名称更改为 APNGImageAPNGImageView

    加载APNG映像
    // Load an APNG image from file in main bundlevar image =APNGImage(named: "your_image")// Or// Load an APNG image from file at specified pathvar path = NSBundle.mainBundle().pathForResource("your_image", ofType: "apng")iflet path = path {
     image =APNGImage(contentsOfFile: path) 
    }// Or// Load an APNG image from datalet data: NSData =...// From disk or network or anywhere else.image =APNGImage(data: data)

    APNGKit将尝试一次加载图像中的所有数据,以便以后可以平滑地播放动画。 但是,如果你试图加载大型APNG文件,你可以能希望尽可以能地保持内存占用尽可以能小。 对于这种情况,你可以使用渐进方式加载图像。 它将只加载当前需要显示的帧。 这将节省大量内存,但要以牺牲性能为代价。 要启用渐进方式,只需传递给初始值设定项的选项:

    let image =APNGImage(data: data, progressive: true)
    显示APNG图像

    使用 APNGImage 对象时,可以使用它初始化图像视图并使用 APNGImageView 在屏幕上显示,是 UIView的子类:

    let image: APNGImage =...// You already have an APNG image object.let imageView =APNGImageView(image: image)
    view.addSubview(imageView)

    然后播放动画:

    imageView.startAnimating()

    如果你是一个接口构建者,将 UIView ( 请注意,不是一个 UIImageView。) 拖到画布上,并将它的类修改为 APNGImageView。 然后,你可以拖动 IBOutlet 并按常规方式播放。

    缓存

    APNGKit在加载图像时使用内存高速缓存来提高性能。 如果你使用 initWithName: 或者 initWithContentsOfFile:saveToCache: 使用 true,APNGKit将缓存结果以便以后使用。 通常情况下,你无需处理缓存。 当收到内存警告或者应用程序切换到后台时,APNGKit将管理并释放缓存。

    如果需要大量内存来执行操作,可以调用这里操作强制APNGKit清除内存缓存:

    APNGCache.defaultCache.clearMemoryCache()

    有时会有很多有用的事情,因为当你分配大量内存时,应用程序会崩溃。 但是这应该很少,因这里如果你不确定它,只要让APNGKit管理缓存本身。

    PNG压缩

    Xcode将在你构建项目时压缩你的应用程序包中的所有PNG文件。 由于APNG是PNG的扩展格式,Xcode会认为该文件中存在冗余数据,并将它的压缩到单个 static 映像中。 这不是你想要的。 你可以通过在应用程序目标的构建设置中设置"compress_png_files"来禁用PNG压缩。 然而,它也会阻止Xcode优化你的其他常规 png。

    一个更好的方法是,除了"png"之外,重命名你的APNG文件。 如果这样做,Xcode将停止将APNG文件识别为PNG格式,并且不会对它们应用压缩。 建议的扩展是"apng",它将由APNGKit无缝地检测和处理。

    待办事项

    当前APNGKit只能加载和显示APNG文件或者数据。 有计划扩展这个框架以从独立的PNG文件导出和写入APNG文件作为框架。

    也许稍后还会添加一些APNG动画播放或者更多控制游戏的回调。 IBDesignable支持也在计划中。

    确认

    APNGKit是建立在libpng的修改版本之上的。 原始的libpng可以在这里找到 我在这个项目的基础上,对基于代码的APNG进行了修补。

    在README文件中的演示图像是从ICS实验室窃取的,你可以在这里找到原始的帖子

    这个APNGKit的设计是由雨雨( yuchen liu ) 设计的,他是一位优秀的设计师,同时也是一位熟练的程序员。

    引用

    如果你对APNG感兴趣,你可以从下面的( 其中有些是用中文写的。) 链接了解更多关于它的信息。

    APNGKit现在只能加载和显示APNG图像。 创建特性将在以后进行开发。 如果你现在需要创建APNG文件,我建议使用 iSparta 或者 apngasm。

    许可证

    APNGKit是在MIT许可证下发布的。 详细信息请参阅许可证。



    文章标签:for  form  play  HIG  PERF  格式  性能  DEL  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语