最近读cocoaui源代码有感

  上半年为了做一个ios的应用,引入了cocoaui库,主要是用来布局ios界面,发现简化了不少代码和工作量。因为在写第一个ios应用的时候,用的代码布局,在适配4s和6的机型时候,几乎被搞死,大量的约束定义充斥在代码中,惨不忍睹。

  cocoaui的作者是ssdb的作者ideawu,在微博里面比较活跃,有问题at他一般很快就会有回应。ssdb是一个类似于redis的nosql数据库;像这样一个在客户端和服务器领域都有建树的人还是很少的。我等普普通通的程序员,距离这种大神还是有一些距离,不过不能气馁,了解他们才能接近他们。除了羡慕他们解决问题的能力,还是要学习他们解决问题的思路,以及这种解决了问题还分享的精神。

  记得大学的时候,每次学习新的语言的时候,总借用第三方库做一个词典,一个天气预报,计算器或者类似于游览器这样小工具等。比如词典使用百度词典api,游览器使用的webview,不过那个时候真的想过实现一个游览器,自己解析html+css。大学时候做xml的解析还是差很多的,最终也是一行代码也没有写,其实想想有很多xml解析库可以借鉴来使用的。

  说说cocoaui的思路,在布局ios应用界面的时候,即没有使用xib,也没有使用storyboard;而是借用web的html+css来做ios的界面布局。整体思路就是借用libxml2库去解析的html标签,并且将其转换成对应的uibutton,uilabel,uiimage,uiview,放置到界面中,至于他们在界面的中的位置,则是通过解析css,然后去设置border,margin,padding,width,height,corlor,text;关于css的解析,作者写了两篇文章介绍,http://www.ideawu.net/blog/archives/912.html http://www.ideawu.net/blog/archives/868.html,有兴趣可以拜读一下,思路很清晰。

  大家都在说ios的约束布局不适合人理解,可是大部分人还是去适应了。可是cocoaui的作者绕过ios的约束布局,借用web的div+css去实现流式布局,这真是给了我们一个很好的选择,同时也提供了一个解决问题的思路,不要陷入其中,而是跳出来从新选择其他的方式。当然能写cocoaui也是需要很深的技术功底的,比如css的解析。

  按照这个思路,我们可以从新定义android的布局方式,不知道大家有没有想过android的布局文件是很邋遢的,或者说很啰嗦,很冗余。如果是一个小型应用;xml的配置文件大小几乎相当于整个代码文件的大小了。我们按照cocoaui的思路,也可以定义html+css的方式去布局。

  1:在activity里面,引入xml文件。

  2:使用dom4j去解析xml中的html标签,并且将这些标签转换成android的控件,比如input(type=button)的转换成Button,input(type=input)转换为edittext,span转换成textview,div转换成layout。

  3:解析css文件,定义控件在界面中的位置,比如遇到margin:0 10 0 0,就去获取button的LinearLayout.LayoutParams,然后调用setMargins函数去设置button的margin,遇到padding:10 0 0 0,同理;遇到color;就去设置button的backgroundColor就可以;等等,就不一一列举。

  这样是不是就从新定义了android的布局问题,我们甚至可以使用引用css的方式,去定义公用的css方式,这样能更能简化布局文件。也就解决了androidxml布局冗余的问题。

  当然了,这只是一个思路,talk is cheap,show code!

  

时间: 2025-01-04 14:10:49

最近读cocoaui源代码有感的相关文章

读{人件}有感

                                                                                                   读<人件>有感 本书共分为六个部分,分别为管理人力资源模块,办公环境模块,正确的人模块,高效团队养成模块,沃土模块与快乐的工作六个模块. 在第一部分中:具体描述了人的工作机制,人是非模块化的,将模块化适用于个人是起不到效果的,而在我们大多数的工作中,问题更多在于社会学的领域范畴,而非技术上的,我们的

读架构漫谈有感

读文章伊始感觉文章并没有像其他文章一样引用了大量的专业术语,文章的例子都非常浅显易懂所以以我的水平也可以看懂.对于软件架构虽然早就听过但是还是这学期准确是这周才开始学习架构的概念,在有一点点理解的基础上读了这篇文章,文章开始引出了架构的概念然后步步深入其实刚开始都的时候我并不是很懂甚至有一些疑惑.作者提到当一个群体产生的时候由于不同的人擅长不同导致了分工的不同.我在想当时的人类就有这种明确的分工合作的意识么而且人类并不一定只做一件事他们肯定还要做其他的事情,后来我继续读的时候才发现,所谓的分工合

读DataSnap源代码(一)

Delphi的DataSnap用了一段时间了,但一直感觉有些地方还不够了解,所以花时间阅读了源代码,特作此烂笔头. Datasnap是在之前的WebBorker基础上搭建的,DataSnap向导自动生成了基础的代码,所以就以基础代码为起点来看看DataSnap的内部机制. 首选创建一个 Stand-alone 的REST App,  向导至少会为我们生成一个Form1和一个WebModule1, FormUnit1单元如下: unit FormUnit1; interface uses Wina

优化MySQL,还是使用缓存?读一篇文章有感

今天我想对一个Greenfield项目上可以采用的各种性能优化策略作个对比.换言之,该项目没有之前决策强加给它的各种约束限制,也还没有被优化过. 具体来说,我想比较的两种优化策略是优化MySQL和缓存.提前指出,这些优化是正交的,唯一让你选择其中一者而不是另一者的原因是他们都耗费了资源,即开发时间. 优化MySQL 优化MySQL时,一般会先查看发送给mysql的查询语句,然后运行explain命令.稍加审查后很常见的做法是增加索引或者对模式做一些调整. 优点 1.一个经过优化的查询对于所有使用

读 大数据 有感

最小数据集(Minimum Data Set,MDS)最小数据集的概念起源于美国的医疗领域,用来统一医疗账单.最小数据集是指通过收集最少的数据,最好地掌握一个研究对象所具有的特点或一件事情.一份工作所处的状态,其核心是针对被观察的对象建立一套精简实用的数据指标.最小数据集的出现,最早是因为不同组织之间信息交换的需要,例如,两个医院之间,医院和政府医疗管理部门,医院和保险公司之间以及一些社会福利部门之间,都有交换信息的需要.随着最小数据集的推广,越来越多的社会组织.地方政府和联邦政府的业务部门之间

读《大学有感》④

<大学之路>这本书里面吴军博士用了大量章节来写他去参观的英美高校,将每所大学的发展历程.特色.校园环境等都写了出来,不难看出,英美高校每所大学的特点都不一样,吸引人的地方也不一样,带给每个人的感觉也不一样.所以将这下册读完之后,这次的读书笔记我想将这些高校所带给我的不同的感受一一写出来,同时也总结整本书带给我的启发与感想. 作者在写美国高校前先写了英国的剑桥和牛津两所高校.两所学校都运用了学院制,便于学生们相互学习.每个学员的管理是非常独立的,也都有各自的特色.教授也会住在学院里,有教授制这样

第一次作业:读优秀博文有感

摘要:本文介绍了我阅读优秀博文之后结合个人经历的感想,包括为什么会选择计算机这个专业,我学习计算机的条件,与优秀博文博主的比较:还有我在计算机系里学习的一些看法经历:最后介绍我的未来规划. 第一部分:结缘计算机 时光荏苒,转眼大三,再想想当初选择计算机这个专业,说实话我已经记不清楚当初为什么会在第一志愿上填这个专业.思考一下,当时可能是这么想的,计算机毕业后可以挣得钱多一点,而且集美大学在厦门,离家近,我的高考分数这个专业比较稳.然后我学习计算机的条件,说出来你可能不信,我还没发现我有这一方面的

用心去感受和倾听--读杨澜访谈录有感

本来是不打算写书评的,看书是一种输入的过程,而码字是一个输出的过程,这个过程需要思考,回忆,联想,总结.是一个脑力活动,但是最近又想到读书的几个过程,颇觉我应该在每次看完书后,写点什么,就算留点回忆吧,毕竟世上的书籍就如同柳树飘飞的柳絮,能够遇见一本书,并耐心的读完,是我和书的缘分. 每次看杨澜的文字,都会有一种安宁的感觉,她有一种魅力能够让你静下心来走进她的访问,感受别人不一样的生活.前些天在图书馆借了一本某周刊的大师访谈录,看了几篇,实在看不下去了,丢置在床边,因为他的访问就像是一片叶子浮在

读DataSnap源代码(二)

program Project1; {$APPTYPE GUI} {$R *.dres} uses Vcl.Forms, Web.WebReq, IdHTTPWebBrokerBridge, FormUnit1 in 'FormUnit1.pas' {Form1}, ServerMethodsUnit1 in 'ServerMethodsUnit1.pas', WebModuleUnit1 in 'WebModuleUnit1.pas' {WebModule1: TWebModule}; {$R