海豚社區階段性開發總結

  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()), ^{

});

相關文章
相關標籤/搜索