iOS仿蝉游记图文排版方法

为了增加应用的阅读体验,一种友好的图文排版必不可少。查看市场上各类应用,大体上有两种方式来展现图文,一种是很简单的方式,即加载H5页,另一种便是根据事先约定好的数据格式使用TableView来进行展现。使用第二种方式为了让文字段落更加优美更具多样性,也不得用到CoreText。
这两天查看分析了下蝉游记的图文排版,忍不住写了一个Demo。

浏览蝉游记图文展现界面可以发现,其中图文是以一定格式进行排版的。如下图中蓝线框所示,它是以几种类型的cell来组合展示图文,比如第一个框中的cell包含一个标题和一段文字,第二个框中的cell包含图片段落文字。当然,定义好cell类型之后,还需根据数据的具体格式来进行展现,比如服务器下发的某条数据仅包含一个标题并没有文字段落,那第一个框中的cell则只展现标题,总之每个cell需根据数据内容调整布局。

蝉游记图文中的段落文字十分美观,免不了使用CoreText,CoreText的渲染原理可以查阅相关文档,相关开源框架Github上也不少,请自行搜索。同时,展现优美的文字,需要加入第三方字体库,怎么加入请查看相关资料。

为了更灵活组装图文布局,cell的种类可以更小粒度定义。本Demo作为参考,仅定义三种基本的cell类型,分别是标题cell、图片cell以及文字段落cell,如下图蓝线框所示。通过这三种基本的cell即可组合很友好的图文了,当然,如果页面元素较复杂,可以定义出更多丰富的cell类型。相比蝉游记的cell类型定义,我想,cell粒度越小越好,比如某条数据中只包含图片或者只包含文字时,就不需去特意调整cell的布局。

定义好了三种cell,就需要定义一下数据格式了。服务器以定义好的数据格式下发,客户端解析后进行图文展现。数据采用JSON格式下发,拟定某条数据的格式如下:

    {
        "type":xx,
        "info":{
            "param1":"xxx",
            "param1":"xxx",
            ...
        }
    }

根据三种cell类型的定义,本Demo中对应的数据格式分别如下:

    {
        "type":0, // 标题
        "info":{
            "title":"xxx",
        }
    }

    {
        "type":1,
        "info":{
            "text":"xxx", // 锻炼文字
            "user":"xxx",  // 用户名,如果有则会以@的方式显示,无则不展示
            ...
        }
    }

    {
        "type":2, // 图片
        "info":{
            "image":"http://xx", //图片链接
            "ratio":xx, // 图片高宽比
        }
    }

那么,服务器下发的是一个多条基本数据组成的列表,如:

    [{
        "type":0,
        "info":{
            "title":"xxx",
        }
    },
    {
        "type":2, // 图片
        "info":{
            "image":"http://xx", //图片链接
            "ratio":xx, // 图片高宽比
        }
    },
    ...
    ]

这些工作确定好后,就可开始编写代码了。另外,为了实现蝉游记的导航栏变化效果,需要生成对应的高斯模糊图片,具体实现细节,可参考本文 demo源码 吧。下图为demo截图(有需要的朋友请下载体验哦):

本Demo仅实现了图文排版的展开,相对比较简单,但对于图文编辑并怎么保存数据以及怎样同步到服务器就不是这么简单了,分析相关应用目前图文编辑有使用TableView来插入图片文字的,有使用CoreText框架的,有使用WebView来实现的。

(写于2016/03/06,现同步到简书)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,559评论 4 61
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 24,373评论 8 183
  • 曾以为,遇见是一件很美妙的事情,这件事情会发生在特定的时间,特别的场景下,像是万千众生中的回眸一瞥,四目对视,满面...
    繁华未尽阅读 2,823评论 0 0
  • “幼小的心灵,开着冷漠的奇葩;无言的双眸,画着怪异的图画,宝贝我知道,你有你的天堂,你有你的梦想”或许正如歌曲中唱...
    暗黑系狒狒张阅读 3,593评论 0 0
  • 输入键盘设置 placeHolderTF.keyboardType = UIKeyboardTypeASCIICa...
    然亦伞阅读 2,795评论 0 0

友情链接更多精彩内容