高仿新浪微博,写了个小demo

运用新浪开发的微博数据接口,花了两天时间高仿新浪iphone手机客户端的写了新特性和首页,感觉运用到的知识点还是挺多的,尤其实在框架的搭建和代码的封装上,直接决定了系统的重用性和扩展性,案例视图:

                          

共享几个案例中用到的小技巧:

(1) 重写按钮的样式

   一般按钮中的文字和图片都是左右排,
那么如何按照自己的想法,任意的控制按钮中元素的排列呢?


 1 #import "XHcenterBtn.h"
2 #import "UIImage+XH.h"
3
4 @implementation XHcenterBtn
5
6 - (id)initWithFrame:(CGRect)frame
7 {
8 self = [super initWithFrame:frame];
9 if (self) {
10 self.adjustsImageWhenHighlighted = NO;
11 self.imageView.contentMode = UIViewContentModeCenter;
12 self.titleLabel.textAlignment = NSTextAlignmentRight;
13 self.titleLabel.font = [UIFont boldSystemFontOfSize:19.0];
14 [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
15 [self setBackgroundImage:[UIImage resizedImageWithName:@"navigationbar_filter_background_highlighted"] forState:UIControlStateHighlighted];
16 }
17 return self;
18 }
19
20 // 对标题的位置进行控制
21 -(CGRect)titleRectForContentRect:(CGRect)contentRect{
22 CGFloat titleX =0;
23 CGFloat titleY =0;
24 CGFloat titleW =contentRect.size.width * 0.7;
25 CGFloat titleH =contentRect.size.height;
26 return CGRectMake(titleX, titleY, titleW, titleH);
27 }
28
29 // 对图片的位置进行控制
30 -(CGRect)imageRectForContentRect:(CGRect)contentRect{
31 CGFloat imageX =contentRect.size.width * 0.7;
32 CGFloat imageY =0;
33 CGFloat imageW =contentRect.size.width * 0.3;
34 CGFloat imageH =contentRect.size.height;
35 return CGRectMake(imageX, imageY, imageW, imageH);
36 }
37
38 @end

这里介绍的是文字在左,图片在右的按钮样式控制,如果要上下排列则对Y值进行相应调整即可.

(2) 几个非常实用的模型转换类


/**
* 将模型转成字典
* @return 字典
*/
- (NSDictionary *)keyValues
{
NSMutableDictionary *keyValues = [NSMutableDictionary dictionary];

[self enumerateIvarsWithBlock:^(XHIvar *ivar, BOOL *stop) {
if (ivar.isSrcClassFromFoundation) return;

// 1.取出属性值
id value = ivar.value;
if (!value) return;

// 2.如果是模型属性
if (ivar.type.typeClass && !ivar.type.fromFoundation) {
value = [value keyValues];
} else if ([self respondsToSelector:@selector(objectClassInArray)]) {
// 3.处理数组里面有模型的情况
Class objectClass = self.objectClassInArray[ivar.propertyName];
if (objectClass) {
value = [objectClass keyValuesArrayWithObjectArray:value];
}
}

// 4.赋值
NSString *key = [self keyWithPropertyName:ivar.propertyName];
keyValues[key] = value;
}];

return keyValues;
}

/**
* 通过模型数组来创建一个字典数组
* @param objectArray 模型数组
* @return 字典数组
*/
+ (NSArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray
{
// 0.判断真实性
if (![objectArray isKindOfClass:[NSArray class]]) {
[NSException raise:@"objectArray is not a NSArray" format:nil];
}

// 1.过滤
if (![objectArray isKindOfClass:[NSArray class]]) return objectArray;
if (![[objectArray lastObject] isKindOfClass:self]) return objectArray;

// 2.创建数组
NSMutableArray *keyValuesArray = [NSMutableArray array];
for (id object in objectArray) {
[keyValuesArray addObject:[object keyValues]];
}
return keyValuesArray;
}

#pragma mark - 字典数组转模型数组
/**
* 通过字典数组来创建一个模型数组
* @param keyValuesArray 字典数组
* @return 模型数组
*/
+ (NSArray *)objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray
{
// 1.判断真实性
if (![keyValuesArray isKindOfClass:[NSArray class]]) {
[NSException raise:@"keyValuesArray is not a NSArray" format:nil];
}

// 2.创建数组
NSMutableArray *modelArray = [NSMutableArray array];

// 3.遍历
for (NSDictionary *keyValues in keyValuesArray) {
if (![keyValues isKindOfClass:[NSDictionary class]]) continue;

id model = [self objectWithKeyValues:keyValues];
[modelArray addObject:model];
}

return modelArray;
}
我们都是站在巨人的肩膀上编程,呵呵!!!!!!!!!!!

高仿新浪微博,写了个小demo

时间: 2024-10-10 23:27:13

高仿新浪微博,写了个小demo的相关文章

原生JS写了一个小demo,根据输入的数字生成不同背景颜色的小方块儿~

昨天练习写了这个小demo,个人觉得通过设置定位元素left和top的值,来实现换行的功能,这种方法很巧妙~ 另外,如下代码中的随机颜色的获取,还请各位前辈多多指教:需要改进的地方:或者有没有更好的方法. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style type="text

使用 swift3.0高仿新浪微博

项目地址:https://github.com/SummerHH/swift3.0WeBo 使用 swift3.0 高仿微博,目前以实现的功能有,添加访客视图,用户信息授权,首页数据展示(支持正文中连接匹配,@匹配)支持照片浏览,大图浏览,保存图片到相册本地, 实现发布微博,发微博添加照片,发送Emoticon表情等功能, 先看下项目整体框架 项目使用 MVC 框架,但是在写的过程中也用到了 MVVM设计模式

java高仿新浪微博短链接地址生成工具ShortUrlGenerator.java

原文:仿新浪微博 短链接地址生成工具 ShortUrlGenerator.java 源代码下载地址:http://www.zuidaima.com/share/1550463378934784.htm 仿新浪微博 短链接地址生成工具 ShortUrlGenerator.java String sLongUrl = "http://www.zuidaima.com/share/1550463378934784.htm"; // 3BD768E58042156E54626860E241E9

安卓开发笔记——高仿新浪微博文字处理(实现关键字高亮,自定义表情替换并加入点击事件实现)

先让大家看下效果图,这个是我自己在闲暇时间仿写的新浪微博客户端: 今天来讲讲如何实现上图的效果,这里需要用到SpannableString这个工具类,如果你对这个类并不熟悉,可以先看下我之前写的2篇文章: <安卓开发笔记——个性化TextView(新浪微博)>:http://www.cnblogs.com/lichenwei/p/4411607.html <安卓开发笔记——丰富多彩的TextView>:http://www.cnblogs.com/lichenwei/p/46120

基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)

高仿网易严选的微信小程序商城(微信小程序客户端) 界面高仿网易严选商城(主要是2016年wap版) 测试数据采集自网易严选商城 功能和数据库参考ecshop 服务端api基于Node.js+ThinkJS+MySQL 计划添加基于Vue.js的后台管理系统.PC版.Wap版 GitHub: https://github.com/tumobi/nideshop-mini-program 项目截图 首页 专题 分类 商品列表 商品详情 购物车 订单中心 功能列表 首页 分类首页.分类商品.新品首发.

iOS启动时如何添加引导页面 小demo

相信大家都看到过手机应用在启动的时候,都会有一个很漂亮的页面,在这个页面显示之后,如果你是第一次打开该应用还会有提示图片(如程序怎么使用等等),今天自己写了一个小demo 在此分享一下,可以给新学者一个参考             以上就是在Xcode中如何找到设置引导页面的位置 对于图片的设置大家可以看到图中有2x  和R4 两种,对于这两种类型的区别如下 R4 代表的是Retina屏幕也就是高清屏,那么这里我们选择的引导图片,一般情况下,在工程中如果有[email protected] 或者

一个上传图片,预览图片的小demo

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>3</title> <script> function getFullPath(obj) { if (obj) { //Internet Explorer if (window.navigator.userAgent.indexOf("MSIE") >= 1)

Androidstudio如何制作一个高仿小米计算器小demo

Androidstudio如何制作一个高仿小米计算器小demo ————安德风 一.最终成品效果图: 二.界面设计布局源代码:文件名activity_main.xml (存放在jsj(我的模块名为jsj)/res/layout/activity_main.xml) 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.a

Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO

距离上次发布(android高仿系列)今日头条 --新闻阅读器 (二) 相关的内容已经半个月了,最近利用空闲时间,把今日头条客户端完善了下.完善的功能一个一个全部实现后,就放整个源码.开发的进度就是按照一个一个功能的思路走的,所以开发一个小的功能,如果有用,就写一个专门的博客以便有人用到独立的功能可以方便使用. 这次实现的功能是很多新闻阅读器(网易,今日头条,360新闻等)以及腾讯视频等里面都会出现的频道管理功能. 下面先上这次实现功能的效果图:(注:这个效果图没有拖拽的时候移动动画,DEMO里