模仿 app
前言
作为一个IOS程序员,闲的时候也想自己做一个app练练手,又苦于没有UI设计,也没有好的idea,所以只能先模仿别人的App了,但是也会遇到以下问题
①不知道怎么入手?怎么设计
②app中的素材、图标要自己找吗、没有UI妹子给你切图怎么办,
③没有数据怎么办?假数据也不会做怎么办
④编写程序中该注意些什么
以下就从上面的三点开始介绍
Tips:一下均为我个人的见解,有疑问或者建议请告诉我
以我的高仿项目半糖App为例
一、不知道怎么入手?怎么设计
首先,整体浏览一下官方的半糖App,
上面几张图片分别对应的是 首页、广场、消息中心、个人中心,,rootViewController是 UITabBarController,以首页为例
Tips:
- 1 整体上分为 两大部分 headerView 和UICollectionView
- 2 每次点击标签 "最新" "热门"等,collectionView 都会滚动到对应标签的tableView中,
collectionView结构上来看就是这样:
也就是 tableview 添加到collectionViewCell.contentView中显示出来
*headerView的结构如下
*
这一部分组合的自由度较大,然后每个按钮都设置不同tag,然后所有按钮添加相同的方法,比如
- (void)clickCenterWithTag:(UIButton *)sender{
if(sender.tag == 按钮tag值){
}
}
当然也可以设置一个block回调,参数为按钮tag值,在ViewController中 给block赋值的时候,比如
headerView.clickCenterBlock = ^(Int tag){
//在这里进行判断,tag等于多少,进行什么操作
}
还有通知、delegate等方法都可以,就不一一细说了。。
之后的页面没有太过于复杂的结构,对照首页,也可以一一将View剥离出来
二、app中的素材、图标要自己找吗、没有UI妹子给你切图怎么办
① app中好多按钮的图标、背景图片哪里找
大招:电脑上在iTunes中下载你要模仿的app,找到它的存储目录(具体方法百度。)
接着,把 后缀.ipa 改为.zip ,然后把 zip文件打开
显示包内容后,可以看到大部分你所需要的素材图片了
② 切图标注问题(切图我就不说了,我只会截图,ps什么的都不会)
手机安装你要模仿的app,然后截屏,把图片发到电脑上,然后安装Mark Man工具,
,然后将图片拖到Mark Man中,
然后就可以随心所欲地标注,取色等等
三、没有数据怎么办?该怎么去抓包
没有数据有两个方法:
① 做假数据,数据写死,这个不是很现实,因为你要模仿的app肯定有图片,这么做假数据得到猴年马月。。。
② 抓包,其实过程不是很繁琐
下面讲一下抓包的过程:
* 1 工具
Charles 百度上很多可以下载,试用版即可,不需要破解
使用过程:
①将手机和电脑连上同一个wifi,打开抓包工具
②打开半糖app
抓到半糖app的数据,点进去如下:
这就是半糖app的数据,如果没有你想要的,别急,你先浏览你要抓数据的页面,这时候会发现这个目录有新的数据返回,点进去可以看到
点击 JavaScript按钮可以看到原始的json数据
,
将json数据 拷贝到文件中存储起来,这就是本地数据
②下面说一下 如何解析数据,以swift为例,OC类似参考一下。
比如我们将刚刚的json存为 test.rtf(别问我为什么是rtf,因为mac上记事本只有这么一个,当然你也可以存为txt格式等),然后把test.rtf拖到项目中来
上代码:
Tips: 在这里,我们首先要明白一点,字典即为对象的一种表现形式。
先把模型写好:
class TopicModel: NSObject {
//先写两个属性
var id: String?
var title: String?
//从json中读取数据 并给model赋值(以下为Swift代码,OC请参考),封装成类方法更方便
class fun readDataFromJSON() -> TopicModel{
//创建返回的model
let topicModel = TopicModel()
//读取JSON文件
let path = NSBundle.mainBundle().pathForResource("test", ofType: "rtf")
let nsData = NSData(contentsOfFile: path!)
/// json整体转换为字典
let Dict = ( try! NSJSONSerialization.JSONObjectWithData(nsData!, options:.AllowFragments) ) as! NSDictionary
//看上面的图片中,你要抓得数据处于 四层目录下,一步一步来
//先把 "data"从json文件中 剥离出来
let Data = Dict.objectForKey("data") as! NSDictionary
//从Data 中把 "topic"数组剥离出来,由图片可以看到 topic是一个数组 ,存了好多个相同类型的数据
let topicData = Data.objectForKey("topic") as! NSArray
//topic数据已经获取,我们先将第一个元素剥离出来,
// 定义一个object对象,并转换为字典类型
let obj = topicData[0] as! NSDictionary
// 现在将obj字典的值 赋给 我们定义的topicModel
topicModel.id = obj.objectForKey("id") as? String
topicModel.title = obj.objectForKey("title") as? String
//end: 到现在 给model赋值就可以了,返回model即可
return topicModel
}
}
在需要用到model的地方,直接调用 Topic.readFromJSON 就会返回你要的model
现在看来,抓包并没有我们想象中的繁琐
四、编写程序应该注意什么
Tips: 这一部分只是参照我的经验来看,如有建议或者意见请与我交流,望不吝赐教
① 代码尽量要复用,封装控件前看看是否几个控件相似,可以放到一起,比如:
这个是 广场中的标签栏
这个是个人中心的标签栏
这个是清单详情的标签栏
三个控件有不相同的地方,比如标签中的分割线,上面的边框,字体大小,但是,控件中的所有逻辑都一样,这就够了,可以写一个控件,加一些参数,比如说 是否显示边框,frame大小,中间是否有分割线,这样做的话,封装一个控件就可以满足 整个app中类似的控件
② 方法,或者称之为函数,封装也尽量放到一起,比如
app中有很多对图片进行的操作,诸如 放大,裁剪,加边框,可以这样:
//将 这些方法都封装为 类方法 ,OC中也就是 "+"方法
class ImageOperationCenter: NSObejct {
class func ScaleToFize(image: UIImage) -> UIImage {
//对图片进行裁剪处理,并返回
}
class func MakeScale(image: UIImage,scale: CGFloat) -> UIImage {
//对图片进行放大处理,并返回
}
}
Tips:如上,将对图片的处理方法,都放在 ImageOperationCenter
这个类中,调用的时候只需要像这样 let image = ImageOperationCenter.MakeScale(源照片,放大倍数)
即可,用着也方便
③ 与第一点类似,很多相似的控件,Cell尽量复用
诸如
半糖精选的cell 与 用户推荐的cell 类似,但是有不同的地方,而且用到的model也不同,这样我们就要重写两种cell吗,不需要,只要 "用户推荐"的cell 继承 "半糖精选" 的cell,重写里面的方法即可,省了好多功夫,所以写程序一定要在不损失质量的前提下怎么省事怎么来
再来看一个例子。
这个通常会将它作为collectionView
处理,其实,只有8个button的情况下,将button封装为一个View即可,这样,ViewController
中会少了一堆代理方法和一堆初始化collectionView方法
这个也就因人而异吧,要灵活运用哦~
⑤ 其实看到一个页面要先把整个页面的结构确定好,不要写了一半才发现这样写好像太麻烦,或者这样写写不出来
我在我的高仿半糖app中 首页就遇到了这样的问题,开始想着 用UIScrollView
当做容器,里面添加UITableView
显示内容,这样做未尝不可,但是考虑到复用的问题,可以用三个tableView完成复用,但是这样做过于麻烦,所以后来就用collectionView当做容器,将tableView 添加到collectionViewCell中显示出来,这样复用的问题就解决了
写在后面的话
我的开发经验也不多,上面完全是我在做项目中自己的感悟和体会,有些可能会有问题,请参考即可
模仿 app的更多相关文章
- 我爱模仿app之格瓦拉客户端
最近有很多人问我,这个效果该怎么实现,那个功能该怎么实现.所以我准备开个专题,找一些app模仿,写一些示例代码,以供大家参考. 第一个下手的就是格瓦拉,没用过的可以下载看看,效果做的还是可以的,专场, ...
- ★房贷计算器 APP
一.目的 1. 这是一个蛮有用的小工具 2. 之前看了很多demo,第一次来完全的自己实现一个APP 3. 完成之后提交 App Store 4. 作为Good Coder的提交审核材料 二.排期 周 ...
- Android高级之第十一讲Hybird开发
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 随着移动端应用平台的兴起,需求和交互方式的多样化,H5开发逐渐在移动端流行起来:常见的移动产品有We ...
- 【vue.js】入门
慕课网视频学习笔记:http://www.imooc.com/learn/694 1.将html.js.css写到一个后缀名.vue的文件中,区分这三种类型是通过<template>.&l ...
- React 环境搭建及页面调试方法
React 环境搭建及页面调试方法 |作者:RexFang |出处:http://www.cnblogs.com/rexfang/ |关于作者:Java 程序员一枚 |版权:本文版权归作者和博客园共有 ...
- ios --转载获ipa 的图片资源
突然想起当初刚学习iOS的时候,就经常通过抓包和提取素材的方式来模仿App,今天就教大家如何一步步提取App的素材! 大家是否有过想要获取别人的素材的想法?看到某些App的资源很不错,很想导出来用 ...
- 如何获取ipa 包的图片
突然想起当初刚学习iOS的时候,就经常通过抓包和提取素材的方式来模仿App,今天就教大家如何一步步提取App的素材! 大家是否有过想要获取别人的素材的想法?看到某些App的资源很不错,很想导出来用用, ...
- 使用VUE模仿BOSS直聘APP
一.碎碎念: 偶尔在群里看到一个小伙伴说:最近面试的人好多都说用vue做过一个饿了么.当时有种莫名想笑. 为何不知道创新一下?于是想写个DEMO演练一下.那去模仿谁呢?还是BOSS直聘(跟我没关系,不 ...
- 模仿J2EE的session机制的App后端会话信息管理
此文章只将思想,不提供具体完整实现(博主太懒,懒得整理),有疑问或想了解的可以私信或评论 背景 在传统的java web 中小型项目中,一般使用session暂存会话信息,比如登录者的身份信息等.此机 ...
随机推荐
- iOS打上线包或者测试包详细流程
首先登陆苹果官方开发者账号:http://developer.apple.com 进入到如下界面 之后进入如下界面:点击第二项创建证书 整个流程如下图4步 然后按照如下图片进行配置即可 接下来去创建C ...
- vmware 命令行启动虚拟机
在redhat enterprise 5.3安装了vmware workstation,如何用vmware 命令行启动指定虚拟机?/usr/bin/vmware[root@node0 ~]# /usr ...
- MFC应用程序编写实例—完整版(原创)
前段时间,将近花了一周至两周上班和上班后的闲余时间,做了一个用于调试和测试工作项目的应用软件,下面将实现软件的重要步骤及主要功能讲解一遍,方便日后查阅. 程序开始后,提示登录框,输入用户名,密码后,登 ...
- java使用iText生成pdf表格
转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ...
- 分布式事务实现-Spanner
Spanner要满足的external consistency 是指:后开始的事务一定可以看到先提交的事务的修改.所有事务的读写都加锁可以解决这个问题,缺点是性能较差.特别是对于一些workload中 ...
- Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里 ...
- 好用的API文档--在线版
安卓在线api http://www.android-doc.com/reference/packages.html
- Inno Setup入门(二十)——Inno Setup类参考(6)
存储框 存储框也是典型的窗口可视化组件,同编辑框类似,可以输入.显示文本,但是和编辑框不同的是,编辑框只能编辑.显示单行文本,而存储框则可以对多行文本进行操作.存储框的类定义如下:< xmlna ...
- KVM 基本硬件容量扩容
在工作当中如果虚拟机的容量不够使用 如何添加呢? CPU添加 cpu添加有两种方式: 1 创建虚拟机的时候可以添加 # virt-install --help | grep cpu --vcpus=V ...
- dos命令(Cacls和Icacls) -- 显示或者修改文件的访问控制表
1. dos帮助说明 cacls /? 注意: 不推荐使用 Cacls,请使用 Icacls. 显示或者修改文件的访问控制列表(ACL) CACLS filename [/T] [/M] [/L] [ ...