總結(jié):iOS中的小坑

本文主要用于自己記錄一些我在開發(fā)當中有意無意收集的一下小技巧或者代碼段。
如有版權(quán)問題請告知,我將盡快刪除。(大部分也是我從度娘搜羅而來)
如果有錯誤的地方,請諸位幫忙提醒,感激不盡。
文中代碼僅供參考,并不能作為實在的開發(fā)中的源碼,而且本人不添加使用環(huán)境,請讀者自行理解。
1.為View添加漸變色。
<pre>CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = rect;

//漸變色顏色數(shù)組
gradient.colors = [NSArray arrayWithObjects:(id)[UIColor redColor].CGColor,
(id)[UIColor yellowColor].CGColor,
(id)[UIColor greenColor].CGColor,nil];

[self.layer insertSublayer:gradient atIndex:0];</pre></code>

2.畫一條虛線
<pre>CGContextRef context = UIGraphicsGetCurrentContext();
CGContextBeginPath(context);

//設(shè)置線寬

CGContextSetLineWidth(context, 0.5);

CGContextSetStrokeColorWithColor(context, CustomColor(198, 198, 198).CGColor);

CGFloat lengths[] = {15,5};

//注意2(count)的值等于lengths數(shù)組的長度

CGContextSetLineDash(context, 0, lengths, 2);

CGContextMoveToPoint(context, 0, TopHeight);

CGContextAddLineToPoint(context, ScreenWidth - 20, TopHeight);

CGContextStrokePath(context);

CGContextClosePath(context);</pre>

3.這幾天的進度基本做完了,一直沒有敲代碼。在這里推薦一篇文章吧。也是我一直覺得非常好的文章。、
[關(guān)于View以及程序的架構(gòu)。]
http://casatwy.com/iosying-yong-jia-gou-tan-viewceng-de-zu-zhi-he-diao-yong-fang-an.html
4.今天在做一個自定義的CollectionView的時候發(fā)生了一件很郁悶的事情。
didSelectRowAtIndexPath不響應(yīng)了。。絞盡腦汁冥思苦想,終于發(fā)現(xiàn)問題所在。
<pre>if (!_collectionView) {

UICollectionViewFlowLayout *laout = [[UICollectionViewFlowLayout alloc]init];

[laout setScrollDirection:UICollectionViewScrollDirectionVertical];

_collectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:laout];

_collectionView.backgroundColor = [UIColor whiteColor];

_collectionView.delegate = self;

_collectionView.dataSource = self;

[_collectionView registerClass:[StationSelectMoneyCollectionCell class] forCellWithReuseIdentifier:collectionCellID];

}</pre>
//因為我的CollectionView是作為一個TableView 的Cell存在的,而且是動態(tài)布局的,我把它寫在if里,于是我無法改變CollectionView的大小。所以是不可能響應(yīng)到的。。所以我把它的布局寫在外面,完美解決。
_collectionView.frame = CGRectMake(10, 10, ScreenWidth - 20, _height - 10);

5.今天做了一個東西,覺得很神奇。分享出來。(ps:自己做的)


一個類似于支付寶支付密碼的東西

在這里主要說一下思路。因為源碼還沒有完全脫離出來所以不能貼出Demo了。
上面的東西不用多說了。
1).主要在于密碼輸入的時候,在輸入密碼的地方的下層放置一個TextField,然后將一個ImageView蓋在上面,創(chuàng)建出6個黑色的點,算好坐標,隱藏。
2).注冊一個TextField 的通知UITextFieldTextDidChangeNotification。自定義監(jiān)聽方法。
3).截字,并且根據(jù)TextField的文字長度決定黑點的顯示數(shù)量。
<pre>if (_textField.text.length > 6) {

_textField.text = [_textField.text substringToIndex:6];

}

for (UIImageView *image in _passwordImageView.subviews) {

image.hidden = YES;

}

for (NSInteger i = 0; i < _textField.text.length; i ++) {

UIImageView *sub = [_passwordImageView.subviews objectAtIndex:i];

sub.hidden = NO;

}</pre>
大體就是這樣的。。如果大家有什么更好的辦法歡迎補充~~~

6.關(guān)于文字長度的自適應(yīng)方法。
偶然間發(fā)現(xiàn)
[str sizeWithFont:(UIFont *) constrainedToSize:(CGSize) lineBreakMode:(NSLineBreakMode)] 已經(jīng)掛掉了。。所以在這里給出替代方法的使用方法。
<pre>NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
NSDictionary *attributes = @{NSFontAttributeName:[UIFont systemFontOfSize:font],
NSParagraphStyleAttributeName:paragraphStyle.copy};
CGSize size = [str boundingRectWithSize:allowSize
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes:attributes context:nil].size;</pre>
哎呦,不錯呦。。

7.禁止多個按鈕同時點擊
對于測試組的同事經(jīng)常提的bug:兩個手指同時點擊界面上的多個可點擊的視圖而出現(xiàn)各種錯誤。
有官方的解決方法,將不允許同時點擊的視圖都設(shè)置下參數(shù):
<pre>[view setExclusiveTouch:YES];</pre>

8.獲取當前對象的類名。
如果只是NSLog輸出的話可以用NSStringFromClass([selfclass]);
如果是用來作為賦值或判斷的話可以這么用:<pre><code>[NSString = stringWithUTF8String:object_getClassName(selfClass)];</pre></code>

9.關(guān)于iOS9有許多坑是毋庸置疑的。。。
下面讓我們來看一下關(guān)于iOS9的適配吧~
1).關(guān)于iOS9的網(wǎng)絡(luò)連接問題
在Info.plist中添加這個字段(是一個字典)NSAppTransportSecurity
在字典下添加這個字段(是一個Bool類型,原則YES)NSAllowsArbitraryLoads
2).關(guān)于友盟分享
友盟的SDK里是有的。
友盟的iOS9適配
3).如果你發(fā)現(xiàn)你的程序還有崩潰的話,那么你可以關(guān)閉BitCode功能

關(guān)閉BitCode功能

10.collectionView的cell之間的距離調(diào)整

storyBoard

11.用Storyboard實現(xiàn)簡單的Cell高度自適應(yīng)
在給Cell中內(nèi)容添加約束的時候,如果某一個Label的高度是可變的,那么就給它設(shè)定一個最小值(假設(shè)它為一行)

在Controller中實現(xiàn)estimatedHeightForRowAtIndexPath:方法。返回Row的估算高度。然后就可以實現(xiàn)Cell的高度自適應(yīng)了。(這里我使用的最小值)效果如下:

11.關(guān)于此證書簽發(fā)者無效的問題
今天早上 上班發(fā)現(xiàn)鑰匙串中的所有證書 都 提示此證書簽發(fā)者無效
經(jīng)查找得知系統(tǒng)證書WWDR在2016年2月14日失效,需要更新WWDR系統(tǒng)證書
下載證書地址:
https://developer.apple.com/certificationauthority/AppleWWDRCA.cer
下載之后 雙擊安裝
到這 還需要一步
在登陸里面刪除過期的證書 在系統(tǒng)里面 刪除過期的證書 就可以完美的解決了。所有的證書 都可以使用了

12.關(guān)于這個 linker command failed with exit code 1 報錯的小總結(jié)

報錯

網(wǎng)上有很多關(guān)于這個錯誤的總結(jié)出現(xiàn)( linker command failed with exit code 1)錯誤總結(jié)
這里我只增加一點:需要在對應(yīng)的.m文件里對已經(jīng)聲明的類添加(特指創(chuàng)建Model的時候、、)
<pre>@implementation
@end </pre>
13.self.view.bounds不準確
情景:在更改一個原來用XIB做的Controller,去掉所有的關(guān)聯(lián)然后代碼重寫時發(fā)現(xiàn):
在iPhone6的模擬器上輸出self.view.bound時為 {{0, 0}, {320, 568}}
將對應(yīng)Controller的XIB刪除,完美解決
14.報錯:The file “XXX” couldn’t be opened because you don’t have permission to view it.
原因之一:改錯了Bundle identifer
錯誤原因

15.在日常開發(fā)中CollectionView的應(yīng)用必不可少。Cell放置圖片也是家常便飯。碰到一個問題,collectionView的重用機制是起作用的,但是在來回劃動的過程中內(nèi)存還是一直在增加。我的原因是因為我在Cell中使用了Image 作為接受對象,然后再Set方法里對ImageView進行復(fù)制。所以導(dǎo)致內(nèi)存增加。解決辦法很簡單,將ImageView暴露出來,然后直接使用ImageView.image = image OK 解決。
待更新。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,291評論 4 61
  • 你好嗎…… 青春年少,誰都有過懵懂無知的時期,可是,愛情卻悄無聲息地來過... 很多人都會說年少輕狂,...
    花棉木閱讀 266評論 0 0
  • 呵呵 28號就要開始上班了。
    相相相柳閱讀 204評論 0 0
  • 2012 -驚蟄之際,華南福州,煙雨綿綿,農(nóng)林學(xué)府,朦朧覆蓋,求學(xué)之子,限之于室,高矗而立,望雨而發(fā)。 黑云奔...
    破土的蚯蚓閱讀 344評論 0 1

友情鏈接更多精彩內(nèi)容