海豚社区阶段性开发总结

  1. 图片筛选,加载和显示处理
  2. 手势处理
  3. 字符串处理,字符转义,属性字符串
  4. 时间戳处理
  5. 简易动画效果回顾
  6. 富文本框架推荐FTCoreTextView和FTCoreTextStyle
  7. 其余经验总结

 

1、图片筛选,加载和显示处理数组

一、    加载网络图片,使用了UIImageView+AFNetworking分类的设置方法setImageWithURL。网络

二、    UIImageView重要方法setContentMode:app

setContentMode方法,类型为UIViewContentMode,分为以下几个枚举类型:框架

UIViewContentModeScaleToFill,async

UIViewContentModeScaleAspectFit,      // contents scaled to fit with fixed aspect. remainder is transparentpost

UIViewContentModeScaleAspectFill,     // contents scaled to fill with fixed aspect. some portion of content may be clipped.字体

UIViewContentModeRedraw,              // redraw on bounds change (calls -setNeedsDisplay)动画

UIViewContentModeCenter,              // contents remain same size. positioned adjusted.ui

UIViewContentModeTop,加密

UIViewContentModeBottom,

UIViewContentModeLeft,

UIViewContentModeRight,

UIViewContentModeTopLeft,

UIViewContentModeTopRight,

UIViewContentModeBottomLeft,

UIViewContentModeBottomRight,

ScaleToFill模式表示充满父容器,当图片内容与容器长宽比例不一致,会出现形变;ScaleAspectFit表示适应容器比例,而后所有展现图片,等比缩放;ScaleAspectFill表示填充容器,不会压缩图片,可是图片可能会超出容器边框,而且不显示超出部分。

三、    UIImageView.layer的重要方法setCornerRadius:

设置一个半径,将显示区域截成一个圆。配合使用的方法还有setMasksToBounds和setBorderWidth之类的方法。

四、    UIImageView.layer的重要方法setShadowOffset:

设置阴影效果的偏移位置,参数为CGSize,x正表示右,y正表示下。

五、    UIImageView能够设置animationImages属性,而后调用startAnimating方法,播放一组图片,造成动画

六、    拉伸图片:有时候,须要让图片自适应宽度或者高度,可是又不能失真,因此须要用到图片拉伸技术。

能够采用UIImage的resizableImageWithCapInsets:resizingMode:方法来实现。第一个参数表示一个矩形区域,该区域外的图片部分不会改变,区域内的部分拉伸填充。第二个参数表示模式:拉伸仍是平铺。

 

须要特别注意的一点:在高清屏中,图片须要采用@2x命名模式,不然图片会被拉伸变形。

 

2、手势

UIGestureRcognizer类为手势父类,具备手势状态,委托协议等属性。手势状态主要分为began,changed,ended,cancelled,failed等。能够设置和获取手势最少须要的触摸点数量、有效时间触摸次数。

做为更经常使用和便捷的子类,有以下几种:

UITapGestureRecognizer,表示点击手势

UIPinchGestureRecognizer,表示捏合手势

UIPanGestureRecognizer,表示拖动手势

UISwapGestureRecognizer,表示扫动手势

UIRotateGestureRecognizer,表示旋转手势

 

多采用initWithTarget:action:初始方法,动做为selector指定方法。而后经过目标view的addGestureRecognizer方法添加手势。代理方法可不实现。

 

点击tap手势中,可能会遇到单击和双击共存的状况。此时须要做一个过滤处理,先处理多击手势。方法为:

[singletapGest requireGestureRecognizerToFail:doubleTapGest];

 

3、字符串处理

以前遇到比较多的字符串处理工做,在此总结下重要的内容。

一、对字符串进行md5加密:

使用前,添加引用#import <CommonCrypto/CommonDigest.h>

+ (NSString *)md5HexDigest:(NSString *)input

{

    if (0 == input.length) {

        return nil;

    }

    const char* str = [input UTF8String];

    unsigned char result[CC_MD5_DIGEST_LENGTH];

    CC_MD5(str, strlen(str), result);

    NSMutableString *ret

 = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];//

   

    for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {

        [ret appendFormat:@"%02x",result[i]];

    }

    return ret;

}

 

二、计算字符串的size:

[text boundingRectWithSize:CGSizeMake(width, 0) options:

NSStringDrawingTruncatesLastVisibleLine |

NSStringDrawingUsesLineFragmentOrigin |

NSStringDrawingUsesFontLeading attributes:attribute context:nil]

 

此处用到了attributes,类型为描述字符串属性特征的NSDictionary。以下例子:

NSDictionary* attributeDic = @{NSParagraphStyleAttributeName : paragraphStyle, NSKernAttributeName : [NSNumber numberWithFloat:2.0f], NSFontAttributeName : FONT(DETAILVIEWTEXTSIZE), NSForegroundColorAttributeName : REPLYCONTENTCOLOR};

 

上例中,又涉及了几个类型:

NSParagraphStyleAttributeName表示段落样式属性。

NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc] init];

paragraphStyle.maximumLineHeight = PERLINEHEIGHT;

paragraphStyle.minimumLineHeight = PERLINEHEIGHT;

paragraphStyle.lineSpacing = PERLINEADDEDHEIGHT;

paragraphStyle.paragraphSpacing = PARAGRAPHINSETHEIGHT;

paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;

上面是对段落样式的详细设置。

 

NSKernAttributeName表示字体间距,注意为NSNumber类型

后面两个分别为字体类型和字体颜色。

 

4、时间戳处理

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

设置默认当地时区

[formatter setTimeZone:[NSTimeZone defaultTimeZone]];

设置时间格式

[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

能够自定义时间格式,相似以下

[formatter setDateFormat:@"yyyy-MM-dd 23:59:59"];

 

5、动画效果

主要运用了UIView的动画block方法:

+ (void)transitionWithView:(UIView *)view

duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options

animations:(void (^)(void))animations

completion:(void (^)(BOOL finished))completion

设置动画所在的UIView或者为nil,动画周期,动画类型,动画具体内容,动画完成后后的内容。

 

6、富文本控件研究

FTCoreTextView和FTCoreTextStyle的研究

目前这个框架使用在搜索模块中,用于显示命中的关键词。

用法:

首先采用以下方法实例化FTCoreTextView

[[FTCoreTextView alloc]

initWithFrame:CGRectMake(TABLEVIEWCELLHORIZONOFFSET, TABLEVIEWSECTIONTOPEDGE1, SCREEN_WIDTH - TABLEVIEWCELLHORIZONOFFSET * 2, 23)];

 

而后添加FTCoreTextStyle对象addStyle

FTCoreTextStyle *nameStyle = [[FTCoreTextStyle alloc] init];

        nameStyle.font = FONTBOLD(12);

        nameStyle.color = COLOR(108, 96, 84, 1.0);

        nameStyle.textAlignment = FTCoreTextAlignementLeft;

        [self.postName addStyle:nameStyle];

 

该框架仍是比较强大的,能够自定义相似xml标签,来定义对应的文字样式,还能够这是段落间距和行间距,但惟一不能调整字体间距。因此为了调整字体间距,采用了字体属性样式字符串来显示,这又致使不能兼容xml标签的显示效果,故没有在帖子详情使用该框架。

 

7、其余经验总结

一、    采用ARC方式管理内容,须要在controller退出时候,就将带有subView的UIView上的全部子view所有移除,而且将变量和属性置为nil

二、    将一个对象加入一个数组之后,就能够及时置为nil了

三、    UIImageView只能显示静态图和图片数组,不能显示jif格式图片

四、    tableHeaderView和tableFooterView须要先实例化,才能添加view

五、    最好将用于更新界面的操做放在以下块内

dispatch_async(dispatch_get_main_queue()), ^{

});

六、    NSTimer的类方法,已经启动了计时器,不须要再调用实例方法fire,可能会引发冲突。不使用时,须要调用invalidate停掉计时器,最好最后将对象置为nil。

七、    最好将用于更新界面的操做放在以下块内

dispatch_async(dispatch_get_main_queue()), ^{

});

相关文章
相关标签/搜索