聲明:本人也是iOS新手,如有錯誤,歡迎指正.僅供參考.
1.UITabBar選中的圖片默認渲染顏色為藍色 如果不想改變圖片的顏色 可做如下操作
[objc]view plaincopy
UIImage*image=[UIImageimageNamed:@"app_slogan"];
image=[imageimageWithRenderingMode:(UIImageRenderingModeAlwaysOriginal)];
vc.tabBarItem.image=image;
或者找到對應的圖片如圖所示最下面的RenderAs→OriginalImage
2.通過appearance統一設置所有UITabBarItem的文字屬性
方法後面帶有UI_APPEARANCE_SELECTOR的方法都可以通過appearance的對象來統一設置
3.通過代碼自定義的控件,需要重寫- (instancetype)initWithFrame:(CGRect)frame方法
4.UI控件的坐標及大小可以通過為UIView類添加Category來實現
需要注意:在分類中聲明只會生成方法的聲明不會生成方法的實現和帶有下劃線的成員變量需要手寫setter和getter方法 width height x y
5.自定義打印在pch文件內
如果是調試階段#defineDXYLog(...)NSLog(__VA_ARGS__)
如果是發布程序#defineDXYLog(...)
[objc]view plaincopy
/**如果是調試階段DXYLog==NSLog*/
#ifdefDEBUG
#defineDXYLog(...)NSLog(__VA_ARGS__)
/**如果是發布程序DXYLog替換為空*/
#else
#defineDXYLog(...)
#endif
6.分類category比繼承的優勢在於不會產生新的類生成的類方法簡潔明了
7.
[objc]view plaincopy
/**自適應內容*/
[buttonsizeToFit];
[objc]view plaincopy
//button.contentMode=UIViewContentModeLeft;imageView一般用這個左對齊
/**讓按鈕內部的所有內容左對齊此方法一般用於UIButton*/
button.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;
button.contentEdgeInsets=UIEdgeInsetsMake(0,-10,0,0);
8.
[objc]view plaincopy
/**當push的時候隱藏下面的tabBar*/
viewController.hidesBottomBarWhenPushed=YES;
9.DXTTabBarViewController是繼承自UINavigationController 命名的時候沒有注意 - -
如果使用[UINavigationBar appearance]方法設置,那麼所有的自定義的導航欄都會改變
注: 像appearance這種一次性設置的方法最好放在initialize中設置,在viewDidLoad裡調用次數取決於生成該類對象的個數
[objc]view plaincopy
/**當第一次使用的時候會調用一次*/
+(void)initialize{
/**當導航欄用在DXYTabBarViewController中,appearance設置才會生效*/
UINavigationBar*bar=[UINavigationBarappearanceWhenContainedInInstancesOfClasses:@[[selfclass]]];
[barsetBackgroundImage:[UIImageimageNamed:@"navigationbarBackgroundWhite"]forBarMetrics:(UIBarMetricsDefault)];
}
[objc]view plaincopy
+(void)initialize{
NSMutableDictionary*dic=[NSMutableDictionarydictionary];
dic[NSFontAttributeName]=[UIFontsystemFontOfSize:13];
dic[NSForegroundColorAttributeName]=[UIColorgrayColor];
NSMutableDictionary*selectedDic=[NSMutableDictionarydictionary];
selectedDic[NSFontAttributeName]=[UIFontsystemFontOfSize:13];
selectedDic[NSForegroundColorAttributeName]=[UIColorredColor];
/**通過appearance統一設置所有UITabBarItem的文字屬性*/
/**後面帶有UI_APPEARANCE_SELECTOR的方法,都可以通過appearance的對象來統一設置*/
UITabBarItem*item=[UITabBarItemappearance];
[itemsetTitleTextAttributes:dicforState:(UIControlStateNormal)];
[itemsetTitleTextAttributes:selectedDicforState:(UIControlStateSelected)];
}
證明如圖:
只打印一次
打印了4次
宏定義如下圖
10. #ffff00 代表紅色 R 對應 ff G 對應 ff B 對應 00 24bit 每個8bit 2位
11.水平居中就是使文字在這行、單元格、編輯范圍內處在中間;垂直居中就是使文字在這列、單元格、編輯范圍內處在中間。
12.UIlabel 約束寬度後 可以自適應高度 注:自動換行
13.在sb或xib上 若在UILabel上文字需要換行顯示 做法:option鍵 + 回車鍵 效果如圖
14.
[objc]view plaincopy
/**當cell的selection為None時,即使cell被選中,內部的子控件也不會進入高亮狀態下面的代碼就會失效*/
//self.textLabel.textColor=DXYRGBColor(78,78,78)
//
///**選中當前cell顯示的顏色*/
//self.textLabel.highlightedTextColor=DXYRGBColor(219,21,26)
//UIView*bg=[[UIViewalloc]init];
//bg.backgroundColor=[UIColorclearColor];
//self.selectedBackgroundView=bg;
[objc]view plaincopy
/**可以在這個方法中監聽cell的選中和取消選中*/
-(void)setSelected:(BOOL)selectedanimated:(BOOL)animated{
[supersetSelected:selectedanimated:animated];
self.selectedIndicatorView.hidden=!selected;
if(selected){
self.textLabel.textColor=DXYRGBColor(219,21,26)
}
else{
self.textLabel.textColor=DXYRGBColor(78,78,78)
}
}
15.利用正則表達式驗證郵箱是否正確
[objc]view plaincopy
//利用正則表達式驗證
+(BOOL)isValidateEmail:(NSString*)email
{
NSString*emailRegex=@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate*emailTest=[NSPredicatepredicateWithFormat:@"SELFMATCHES%@",emailRegex];
return[emailTestevaluateWithObject:email];
}
16.KVO實現原理
基於Runtime運行時實現 動態生成繼承自被觀察對象的之類,調用被觀察屬性的setter方法 內部再調用observeValueForKeypath
當某個類的對象第一次被觀察時 系統就會在運行期動態地創建該類的一個派生類 在這個派生類中任何被觀察屬性的setter方法 派生類在被重寫的setter方法實現真正的通知機制(Person → NSKVONotifying_Person)
17.是否可以把比較耗時的操作放在NSNotificationCenter中 不可以,通知中心所做的操作在主線程 比較耗時的一般開啟一個線程單獨去跑
14.渲染自定義格式字符串的UILabel
通過NSAttributeString類
15.客戶端安全性
1.網絡數據傳輸(敏感數據\賬號\密碼\銀行卡)
協議的問題(自定義協議,游戲代練)
2.本地文件存儲(游戲存檔)
3.源代碼
16.下載圖片如何優化
1.開辟子線程
2.使用占位圖片
3.對較大圖片,考慮多線程斷點下載
17.對Button切圓角代碼寫如下
[objc]view plaincopy
//self.loginButton.layer.cornerRadius=5;
//self.loginButton.layer.masksToBounds=YES;
如果使用xib的話,操作步驟如下:使用KVC賦值
選中對應button
18.
[objc]view plaincopy
/**獲取成員變量*/
+(void)getIvars{
unsignedintcount=0;
/**拷貝出所有的成員變量列表*/
Ivar*ivars=class_copyIvarList([UITextFieldclass],&count);
for(inti=0;i/**取出成員變量*/
Ivarivar=*(ivars+i);
/**打印成員變量名字*/
DXYLog(@"%s",ivar_getName(ivar));
}
/**釋放*/
free(ivars);
}
/**獲取屬性*/
+(void)getProperties{
unsignedintcount1=0;
/**拷貝出所有的屬性列表*/
objc_property_t*properties=class_copyPropertyList([UITextFieldclass],&count1);
for(inti=0;i/**取出屬性*/
objc_property_tproperty=*(properties+i);
/**打印屬性名字*/
DXYLog(@"%s------%s",property_getName(property),property_getAttributes(property));
}
/**釋放*/
free(properties);
}
[objc]view plaincopy
/**運行時(runtime)蘋果官方一套C語言庫能做很多底層操作(比如訪問隱藏的一些成員變量\成員方法)*/
+(void)initialize{
unsignedintcount=0;
/**拷貝出所有的成員變量列表*/
Ivar*ivars=class_copyIvarList([UITextFieldclass],&count);
for(inti=0;i/**取出成員變量*/
Ivarivar=*(ivars+i);
/**打印成員變量名字*/
DXYLog(@"%s",ivar_getName(ivar));
}
/**釋放*/
free(ivars);
}
打印結果如下
19.
[objc]view plaincopy
/**通過KVC取隱藏的成員屬性並進行相關操作*/
//UILabel*placeholderLabel=[selfvalueForKey:@"_placeholderLabel"];
//placeholderLabel.textColor=[UIColorredColor];
[selfsetValue:[UIColorcyanColor]forKeyPath:@"_placeholderLabel.textColor"]; 以上兩種方法都能實現
20.
[objc]view plaincopy
-(void)awakeFromNib{
/**解決view控件frame設定好卻實際沒有達到效果的問題autoresizing影響了我們自己的布局*/
self.autoresizingMask=UIViewAutoresizingNone;
}
21.
[objc]view plaincopy
-(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath{
/**取出帖子模型*/
DXYTopicModel*model=self.topics[indexPath.row];
/**通過字體大小計算文字高度在此方法裡調用會重復計算好多次*/
//CGFloattextH=[model.textboundingRectWithSize:CGSizeMake(kScreenWidth-40,10000000)options:NSStringDrawingUsesLineFragmentOriginattributes:@{NSFontAttributeName:[UIFontsystemFontOfSize:14]}context:nil].size.height;
/**返回這個模型對應的cell的高度*/
returnmodel.cellHeight;
}
22.獲取圖片的後綴名 來判斷是否隱藏gif標志
[objc]view plaincopy
/**在不知道圖片擴展名情況下如何知道圖片的真實類型?
取出圖片數據的第一個字節,就可以判斷出圖片的真實類型*/
例如:SDWebImage
[objc]view plaincopy
/**判斷是否為gif*/
NSString*extension=[model.small_image.pathExtensionlowercaseString];
self.gifView.hidden=![extensionisEqualToString:@"gif"];
23. 只需要確定高度或寬度其中一個就可等比例縮放 約束高度較好
效果如下
25.pop是由facebook開發的
/**
pop和Core Animation的區別
1.Core Animation的動畫只能添加到layer上
2.pop的動畫能添加到任何對象
3.pop的底層並非基於Core Animation,是基於CADisplayLink
4.Core Animation的動畫僅僅是表象 並不會真正修改對象的frame\size
5.pop的動畫實時修改對象的屬性,真正修改了對象屬性
*/
//- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//
// POPSpringAnimation *animation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewCenter];
// animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
// animation.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)];
// animation.springBounciness = 20;
// animation.springSpeed = 20;
// animation.beginTime = CACurrentMediaTime() + 1;
// [self.sloganView pop_addAnimation:animation forKey:nil];
//}