运用新浪开发的微博数据接口,花了两天时间高仿新浪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