zoukankan      html  css  js  c++  java
  • 海豚社区阶段性开发总结

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

    一、图片筛选,加载和显示处理

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

    2、    UIImageView重要方法setContentMode:

    setContentMode方法,类型为UIViewContentMode,分为如下几个枚举类型:

    UIViewContentModeScaleToFill,

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

    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.

    UIViewContentModeTop,

    UIViewContentModeBottom,

    UIViewContentModeLeft,

    UIViewContentModeRight,

    UIViewContentModeTopLeft,

    UIViewContentModeTopRight,

    UIViewContentModeBottomLeft,

    UIViewContentModeBottomRight,

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

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

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

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

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

    5、    UIImageView可以设置animationImages属性,然后调用startAnimating方法,播放一组图片,形成动画

    6、    拉伸图片:有时候,需要让图片自适应宽度或者高度,但是又不能失真,所以需要用到图片拉伸技术。

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

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

    二、手势

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

    作为更常用和便捷的子类,有如下几种:

    UITapGestureRecognizer,表示点击手势

    UIPinchGestureRecognizer,表示捏合手势

    UIPanGestureRecognizer,表示拖动手势

    UISwapGestureRecognizer,表示扫动手势

    UIRotateGestureRecognizer,表示旋转手势

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

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

    [singletapGest requireGestureRecognizerToFail:doubleTapGest];

    三、字符串处理

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

    1、对字符串进行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;

    }

    2、计算字符串的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类型

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

    四、时间戳处理

    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"];

    五、动画效果

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

    + (void)transitionWithView:(UIView *)view

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

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

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

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

    六、富文本控件研究

    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标签的显示效果,故没有在帖子详情使用该框架。

    七、其他经验总结

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

    2、    将一个对象加入一个数组以后,就可以及时置为nil了

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

    4、    tableHeaderView和tableFooterView需要先实例化,才能添加view

    5、    最好将用于更新界面的操作放在如下块内

    dispatch_async(dispatch_get_main_queue()), ^{

    });

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

    7、    最好将用于更新界面的操作放在如下块内

    dispatch_async(dispatch_get_main_queue()), ^{

    });

  • 相关阅读:
    【codeforces 787B】Not Afraid
    【codeforces 787A】The Monster
    【codeforces 787C】Berzerk
    【t046】牛跳
    【BZOJ 1033】 [ZJOI2008]杀蚂蚁antbuster(判断线段是否和圆相交)
    Java Web整合开发(81)
    用户、权限管理
    链表
    T1230 元素查找 codevs
    T3139 栈练习3 codevs
  • 原文地址:https://www.cnblogs.com/A-Long-Way-Chris/p/4143400.html
Copyright © 2011-2022 走看看