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