CocoaPods第三方庫管理
http://www.360doc.com/content/14/0309/10/11029609_358970353.shtml循環(huán)引用,無法釋放
self ws獲取設(shè)備id
https://github.com/ylechelle/OpenUDID用pod添加一個第三方庫的步驟
庫的地址:https://github.com/ylechelle/OpenUDID
終端里輸入命令
用pod搜索测萎,若能搜到就能用pod管理:pod search OpenUDID
cd到項目的根目錄
pod install --verbose --no-repo-update使用linq的庫
LinqToObjectiveCdictionary轉(zhuǎn)class的庫
Mantlecopy和strong的區(qū)別
@property (nonatomic, strong)
@property (nonatomic, copy)ios證書
鑰匙串->證書->導(dǎo)出
.p12文件ios中view自適應(yīng)鍵盤的出現(xiàn),不會出現(xiàn)鍵盤擋住輸入框的情況
加入第三方庫IQKeyboardManager
pod 'IQKeyboardManager', '~> 3.2.0.3'tableViewCell的自定義
一般一個頁面里就一個tableView,因為多個tableView并不是一起滑動操作的
一個tableView里分多個塊(section)app程序啟動上面都有黑底邊
可以設(shè)置一下app的launch image忌傻,如果實在不需要驶悟,那就設(shè)置成全黑圖片mac上的svn版本管理工具
cornerstone證書配置
新環(huán)境開始時蕾盯,需要用真機(jī)測試
apple developer后臺添加了真機(jī)uid后
本地增加.p12證書寥闪,xcode選擇team带膀,developer后臺下載Provisioning Profiles文件
本地雙擊了對應(yīng)的.mobileprovision文件后,項目的Build Settings橙垢,Code Signing Identity中要選擇一下收起軟鍵盤
textView輸入時,自動彈出的軟鍵盤伦糯,想要點擊其他地方就可以收起軟鍵盤
收起軟鍵盤的方法有:textView resignFirstResponder截獲點擊事件的方法有:
// 聲明點擊事件 UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(Actiondo:)]; [self.view addGestureRecognizer:tapGesture]; // 自定義點擊處理 -(void)Actiondo:(id)sender { // 注銷當(dāng)前view(或它下屬的text fields)的first responder狀態(tài) [self.view endEditing:YES]; }
素材圖片的扣取
打開對應(yīng)界面的psd柜某,如果寬度640,扣出來的原大小素材圖片就是2x大小敛纲,再縮小一倍大小就是1x
找到對應(yīng)素材位置的圖層(要選中那個圖層喂击,一般可以通過切換對應(yīng)圖層前面的眼睛圖標(biāo)來回切換是否顯示圖層來確定是否選擇中缺),用選擇工具框中淤翔,復(fù)制到另一個新地方(ctrl+N)
在新的地方翰绊,選擇 圖像->裁剪,選擇透明像素旁壮,就可以去除多余的地方
保存為web用格式NSDictionary初始化
鍵值不可以為整數(shù)监嗜,可以轉(zhuǎn)換成NSNumberios多線程
搜gcd點擊事件帶坐標(biāo)
普通的addTarget,對應(yīng)的action方法抡谐,參數(shù)是 (id)sender
換成
UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(Actiondo:)]; [self.btn addGestureRecognizer:tapGesture]; //給自己的btn增加了一個新類型的點擊處理事件 -(void)Actiondo:(UITapGestureRecognizer *)sender { CGPoint = [sender locationInView:self.view]; }
手機(jī)端調(diào)用的api版本
服務(wù)端api裁奇,地址中可以帶上版本號,以同時滿足各版本的請求
例如:http://www.xxx.com/api/myproject/version7/gettopics.php綁定的數(shù)據(jù)刷新
例如TableView麦撵、CollectionView等刽肠,可以通過reloadData來刷新數(shù)據(jù)顯示png出現(xiàn)不透明,例如黃邊的問題
UIImageView設(shè)置背景色backgroundColor=[UIColor clearColor]UICollectionView橫向cell間距免胃,會出現(xiàn)多10
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; [layout setSectionInset:UIEdgeInsetsMake(0,0,0,0)]; [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; [layout setMinimumInteritemSpacing:3]; // 橫向間距 [layout setMinimumLineSpacing:0]; // 只是單行橫向也要設(shè)置 [layout setItemSize:CGSizeMake(30,30)]; self.collectionView = [[UICollectionVIew alloc] initWithFrame:CGRectMake(0,0,320,40) collectionViewLayout:layout];
獲取tableView的偏移量
self.tableView.contentOffset單擊事件后獲取sender
[self.btn addTarget:self action:@selector(actionClick:) forControlEvents:UIControlEventTouchUpInside]; -(void)actionClick:(id)sender { UIButton *btn = (UIButton*)sender; }
調(diào)試看值
可以鼠標(biāo)停在變量上音五,彈出信息
如果不彈出,可以在下方輸出信息框的 藍(lán)色的(lldb)后羔沙,輸入 po self.array 回車 來打印出self.array的值
po就是print object的意思使用gcd多線程獲取數(shù)據(jù)同時更新UI躺涝,但UI刷新不及時
如果使用的不是主線程來獲取數(shù)據(jù)(例如dispatch_async(dispatch_get_global_queue)),那么寫在一起的用于更新UI的代碼也是在非主線程中的
所以如果要及時更新UI撬碟,在非主線程的調(diào)用中诞挨,寫一個主線程更新UI(dispatch_async(dispatch_get_main_queue))ControllerView之間發(fā)送通知
參數(shù):
NSDictionary* userInfo = @{@"key1":@"val1"};
發(fā)送:
[NSNotificationCenter defaultCenter] postNotificationName:@"唯一的通知名" object:nil userInfo:userInfo];
接收者們:
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MyCallBack:) name:@"唯一的通知名" object:nil]; -(void)MyCallBack:(NSNotification *)notification { NSDictionary *userInfo = notification.userInfo; }
異步網(wǎng)絡(luò)請求處理方式之一
無參數(shù)時:ASIHTTPRequest
有參數(shù)時:ASIFormDataRequest系統(tǒng)自帶的alertView
UIAlertView *myAlert = [UIAlertView alloc] initWithTitle:@"這里是提示語" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定",nil]; [myAlert show]; //實現(xiàn)那個delegate -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { // buttonIndex 對應(yīng)上面的按鈕index:0-取消 1-確定 }
cell中使用到了sd_setImage結(jié)果出現(xiàn)了殘影
問題不在sd_setImage莉撇,而是在cell重用時,沒有先設(shè)置imageView setImage=nil惶傻,然后再用sd_setImage編輯框棍郎,編輯時的軟鍵盤彈不出來了
如果是使用的 [textView becomeFirstResponder],來設(shè)置編輯框變成用戶輸入的第一響應(yīng)者银室,來達(dá)成彈出軟鍵盤的效果
需要注意涂佃,該textView是否在不經(jīng)意間被設(shè)置成了不可編輯狀態(tài)(比如鍵盤類型切換時,文字/表情)蜈敢,使他不能被設(shè)置為響應(yīng)者
解決辦法是注意在上一次軟鍵盤收起的時候辜荠,設(shè)置textView.editable = YES 還原編輯框的可編輯狀態(tài)UITapGestureRecognizer 與 tableview collectionView等的選中事件沖突時
重寫UIGestureRecognizerDelegate委托
可以判斷[touch.view class]
但是如果這個tableView里面的cell使用了自定義的樣式里面包好了UIView等等的話,就無法通過view的class來判斷了
可以給self.view這個背景view添加一個tag抓狭,然后判斷touch.view.tag是否是這個tag就可以判斷出來了UIView動畫
[UIView beginAnimations:nil context:nil]; // 開始動畫 [UIView setAnimationDuration:10.0]; // 動畫時長 CGPoint point = _imageView.center; point.y += 150; // 向下移動 [_imageView setCenter:point]; [UIView commitAnimations]; // 提交動畫
cell里使用Masonry布局庫布局伯病,mas_makeConstraints沒有生效或受影響
可能是cell復(fù)用時,make沒有生效的原因
解決辦法是改用mas_remakeConstraints使用Masonry布局后否过,使用UIView animation來做動畫午笛,發(fā)現(xiàn)動畫不自然(控件從四周聚集起來的樣子),或沒有生效
因為autolayout和動畫有沖突苗桂,需要我們手動的立即刷新一下控件的位置(在動畫前药磺,在動畫結(jié)束后,各刷新一下)
WS(ws); // 起始位置 [self.backVIew mas_remakeConstraints:^(MASConstraintMaker *make){ make.top.equalTo(ws.mas_bottom).with.offset(0); make.left.equalTo(ws.mas_left).with.offset(0); make.right.equalTo(ws.mas_right).with.offset(0); }]; // 動畫前立即刷新一下 [self.backView setNeedsLayout]; [self.backView layoutIfNeeded]; // 動畫 [UIView animateWithDuration:0.5f animations:^{ [self.backView mas_updateConstraints:^(MASConstraintMaker *make){ make.top.equalTo(ws.mas_bottom).with.offset(-300); // 注意這里只能對在起始位置設(shè)置過的屬性進(jìn)行修改 }]; // 動畫后立即刷新一下 [self.backView setNeedsLayout]; [self.backView layoutIfNeeded]; }];
隱藏頂部欄StatusBar
一般使用 [[UIApplication sharedApplication] setStatusBarHidden:YES]; 即可
還一種方法煤伟,是修改當(dāng)前window的級別 self.window.windowLevel = UIWindowLevelStatusBar;
LevelStatusBar要大于LevelNormal癌佩,所以會顯示在上面服務(wù)端返回json,app解析出來的emoji表情出現(xiàn)了問題
app解析json便锨,有下面兩種方式
// 方式1(這種方式解析出來的emoji可能會出現(xiàn)問題) NSData *data = [request responseData]; // (ASIHTTPRequest *)request NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSDictionary *dic = [str JSONValue]; // 方式2(這樣的解析在某些時候可以替代方式1) NSData *data = [request responseData]; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
UIButton同時設(shè)置圖片和文字
btn setImage
btn setTitle
間距:btn setTitleEdgeInsets(文字)UITableView style
UITableViewStylePlain:
section header會固定围辙;
heightForHeaderInSection設(shè)置0有效;
UITableVIewStyleGrouped:
section header不會固定放案;
heightForHeaderInSection設(shè)置0無效酌畜;獲取app版本號
NSBundle *bundle = [NSBundle bundleForClass:[self class]]; [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; // 4.9.2 [bundle objectForInfoDictionaryKey:@"CFBundleVerion"]; // 16
cell中的btn點擊后,獲取點擊到的是哪個cell
-(void)btnClick:(id)sender { CGPoint btnPosition = [sender convertPoint:CGPointZero toView:self.tableView]; NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:btnPosition]; }
ios中獲取時間戳
long nowTime = [[NSDate date] timeIntervalSince1970];
app從后臺返回來時執(zhí)行的函數(shù)
appdelegate中的 -(void)applicationDidBecomeActive:(UIApplication *)application{}設(shè)置圓角不生效
UIView.layer.cornerRedius = 12; // 設(shè)置了圓角度數(shù)
UIView.layer.masksToBounds = YES; // 這里要設(shè)置一下tableview插入新row時的動畫效果
[itmes addObject:new_row]; // 如果你是用一個items數(shù)組來存放所有row的數(shù)據(jù)的話 [tableView setContentSize:CGSizeMake(tableView.contentSize.width,tableView.contentSize.height+row_height)] // 為新row增加顯示的空間 [tableView beginUpdates]; [tableView insertRowsAtIndexPaths:[NSIndexPath indexPathForRow:0 inSection:0] withRowAnimation:UITableViewRowAnimationNone]; // 插入新row [tableView endUpdates]; [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[items count]-1 inSection:0 atScrollPosition:UITableViewScrollPositionNona animated:NO]] // 定位到
單個controller可以注冊監(jiān)聽app從后臺返回來的事件
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myfunc) name:UIApplicationWillEnterForegroundNotification object:nil];
用戶標(biāo)識之一
\#define IDFA [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]
判斷是否安裝了某應(yīng)用卿叽,是否打開它
NSURL *appSchemeUrl = [NSURL URLWithString:@"yourapp://"];if ([[UIApplication sharedApplication] canOpenURL:appSchemeUrl]) { [[UIApplication sharedApplication] openURL:appSchemeUrl]; }else{ NSURL *appStoreUrl = [NSURL URLWithString:@"itms-apps://itunes.apple.com/cn/app/yourid"]; if ([[UIApplication sharedApplication] canOpenURL:appStoreUrl]) { [[UIApplication sharedApplication] openURL:appStoreUrl]; } }
單例的使用
User.h: @interface User:NSObject +(User*)shareInstance; @end User.m: static id _instance; @implementation User +(User*)shareInstance { static dispatch_once_t once; dispatch_once(&once,^{_instance = [[self alloc] init];}); return _instance; } @end 調(diào)用的時候: [User shareInstance];
[NSUserDefaults standarUserDefaults] setObject setValue不能放long之類的數(shù)值
用[NSNumber numberWithLong]之類的桥胞,用NSNumber包裝一下NSString 轉(zhuǎn)成 int,0的轉(zhuǎn)換會有問題
[@"0" intValue] = nil監(jiān)控手勢操作
UISwipeGestureRecognizer *recognizer = [UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)]; recognizer.direction = UISwipeGestureRecognizerDirectionRight; [self.view addGestureRecognizer:recognizer]; -(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer{ if(recognizer.direction == UISwipeGestureRecognizerDirectionRight) { [self back]; // 這個例子是右滑手勢的返回功能 } } -(void)back{ [self.nacigationController popViewControllerAnimated:YES]; }
自定義Framework
可打出模擬器專用framework考婴,真機(jī)專用framework
要打出通用性的framework贩虾,需要合并兩個framework
可以在自定義framework項目中,添加Run Script沥阱,每次Run時執(zhí)行一個腳本來自動生成
if [ "${ACTION}" = "build" ]thenINSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.frameworkDEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.frameworkSIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.frameworkif [ -d "${INSTALL_DIR}" ]thenrm -rf "${INSTALL_DIR}"fimkdir -p "${INSTALL_DIR}"cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"#ditto "${DEVICE_DIR}/Headers" "${INSTALL_DIR}/Headers"lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"#open "${DEVICE_DIR}"#open "${SRCROOT}/Products"fi
IOS開發(fā)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門询刹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谜嫉,“玉大人,你說我怎么就攤上這事凹联°謇迹” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵蔽挠,是天一觀的道長住闯。 經(jīng)常有香客問我,道長澳淑,這世上最難降的妖魔是什么寞秃? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮偶惠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朗涩。我一直安慰自己忽孽,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布谢床。 她就那樣靜靜地躺著兄一,像睡著了一般。 火紅的嫁衣襯著肌膚如雪识腿。 梳的紋絲不亂的頭發(fā)上出革,一...
- 文/蒼蘭香墨 我猛地睜開眼蹬昌,長吁一口氣:“原來是場噩夢啊……” “哼混驰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡满粗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 年R本政府宣布沟饥,位于F島的核電站,受9級特大地震影響湾戳,放射性物質(zhì)發(fā)生泄漏贤旷。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一砾脑、第九天 我趴在偏房一處隱蔽的房頂上張望幼驶。 院中可真熱鬧,春花似錦韧衣、人聲如沸盅藻。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽氏淑。三九已至,卻和暖如春硕噩,著一層夾襖步出監(jiān)牢的瞬間假残,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 原文鏈接http://www.cnblogs.com/kenshincui/p/4186022.html 音頻在i...
- Masonry手寫Autolayout專題 Masonry介紹與使用實踐:快速上手Autolayout http:...
- 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...