1:UICollectionView如果在數據不夠一屏時上下滾動
當數據不多,collectionView.contentSize小于collectionView.frame.size的時候,UICollectionView是不會滾動的,可以增加下面代碼就可以:
self.myCollectionView.alwaysBounceVertical = YES;
2:畫虛線CGContextSetLineDash(豎向跟橫向)
豎向: UIImageView *imageView1 = [[UIImageView alloc]initWithFrame:CGRectMake(10, 100, 10, 100)]; [self.view addSubview:imageView1]; UIGraphicsBeginImageContext(imageView1.frame.size); //開始畫線 [imageView1.image drawInRect:CGRectMake(0, 0, imageView1.frame.size.width, imageView1.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCaPRound); //設置線條終點形狀 float lengths[] = {2,2}; CGContextRef line = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(line, [UIColor blackColor].CGColor); CGContextSetLineDash(line, 0, lengths, 2); //畫虛線 CGContextMoveToPoint(line, 10.0, 10.0); //開始畫線(10是指從imageView1y軸起點后的10-50 高共40) CGContextAddLineToPoint(line, 10.0, 50.0); CGContextStrokePath(line); imageView1.image = UIGraphicsGetImageFromCurrentImageContext();
橫向: UIImageView *imageView1 = [[UIImageView alloc]initWithFrame:CGRectMake(0, 100, 320, 20)]; [self.view addSubview:imageView1]; UIGraphicsBeginImageContext(imageView1.frame.size); //開始畫線 [imageView1.image drawInRect:CGRectMake(0, 0, imageView1.frame.size.width, imageView1.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); //設置線條終點形狀 float lengths[] = {10,5}; CGContextRef line = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(line, [UIColor redColor].CGColor); CGContextSetLineDash(line, 0, lengths, 2); //畫虛線 CGContextMoveToPoint(line, 0.0, 20.0); //開始畫線(從X軸從0到310) CGContextAddLineToPoint(line, 310.0, 20.0); CGContextStrokePath(line); imageView1.image = UIGraphicsGetImageFromCurrentImageContext();
注意:lengths的值{10,10}表示先繪制10個點,再跳過10個點,如此反復
如果把lengths值改為{10, 20, 10},則表示先繪制10個點,跳過20個點,繪制10個點,跳過10個點,再繪制20個點,如此反復
3:去掉系統navigationBar自帶底下黑邊(在viewDidLoad里面實現)
- (void)viewDidLoad { [super viewDidLoad]; [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];}
4: XCode 同一Project創建多個target
假設原來的target名字為A,我們需要新建一個target B1. 在原來的target上右鍵,選擇duplicate,Xcode會復制一個名為A copy的target對象,同時生成一個A copy-info.plist和A copy的scheme2. 改名a)對A copy target改名,可以直接單擊target來修改,改成Bb)A copy-info.plist,默認生成在程序環境根目錄,也就是A.xcodeproj的同級目錄中,如果想放到里層(比如與A-info.plist放在同級目錄),可以先在Xcode刪除A copy-info.plist索引,然后拷貝文件到制定目錄中,然后更名為B-info.plist,在add到project中。在Project的Build Settings中,修改Info.plist File選項為B-info.plist的目錄(相對路徑),這樣就可以看到Info頁了(就是B-info.plist),接著修改ProductName和Bundle identifier,使之成為另一個app。Prefix Header的路徑,視具體需求而定是否要修改,如果兩個target可以公用同一個Prefix Header,那么就不需要修改這里的路徑c)修改scheme,在調試的Stop按鈕邊上,我們可以選擇本工程中所有的target來做編譯,如果不修改,在這里選擇出來的名字就是A copy,為了與新建的target統一起來,同樣也要修改這里的名字。點擊scheme選擇區,然后選Manager Scheme,找到A copy,然后改成你需要的名字,比如B用duplicate的好處是,如果兩個target的相同點很多,用duplicate,就可以把相關的設置全部拷貝過來,而不需要做過多的修改生成一個新的target,一定會與原target有區別,這里可以定義預編譯宏,來區分兩個版本的不同代碼,預編譯宏可以在Build Settings中Preprocessor Macros定義,比如在我們新建的target B中定義預編譯宏MACRO,然后在代碼中通過#if defined (MACRO)//target B需要執行的代碼#else//target A需要執行的代碼#endif來區分其他:Build Phases(各target編譯所包含的內容,需要注意的是,如果創建了target B后,再往A里面添加資源或文件,target B中不會自動增加這些資源,需要手動添加)1.Compile Sources需要編譯的代碼文件2.Link Binary With Libraries編譯所依賴的庫3.Copy Bundle Resources編譯需要的資源每個target可以根據具體需要增減里面的內容
5:Xcode7打開舊項目FrameWork文件夾下的.dylib庫缺失,添加方法
項目Target中Link Binary With Libraries 點擊下方 “+”添加, 顯示搜索頁面,在此搜.dylib搜不出來(只能搜到同名的.tbd), 需點擊 Add Other,出現文件目錄頁面 (正常情況通過Finder同樣找不到.dylib文件,因該文件是隱藏文件。需按快捷鍵 CMD+Shift+G,輸入/usr/lib后進入隱藏界面,然后添加需要的.dylib即可。
新聞熱點
疑難解答