iOS中這些牛逼的實(shí)用技巧你造嗎

1. 去掉tableView分割線的多余像素

首先在viewDidLoad方法加入以下代碼:if([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tableView setSeparatorInset:UIEdgeInsetsZero]; }if([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) { [self.tableView setLayoutMargins:UIEdgeInsetsZero];}然后重寫willDisplayCell方法- (void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath{if([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; }if([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; }}

2. 簡(jiǎn)單的獲取當(dāng)前時(shí)間

// CFAbsoluteTime其實(shí)就是doubleCFAbsoluteTimetime =CFAbsoluteTimeGetCurrent();

3.程序直接退出

exit(0);

4.超出父視圖范圍的控件部分響應(yīng)事件

-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event{UIView* hitView = [superhitTest:point withEvent:event];if(!hitView) {CGPointtempPoint = [_testBtn convertPoint:point fromView:self];if(CGRectContainsPoint(_testBtn.bounds, tempPoint)) {? ? ? ? ? ? hitView = _testBtn;? ? ? ? }? ? }returnhitView;}

5.讓一個(gè)視圖始終在最前面

view.layer.zPosition = 999;

6.判斷一個(gè)view是不是指定view的子視圖

BOOLisChildView =? [childView isDescendantOfView:parentView];

7. UIViewController中的幾個(gè)重要方法

* alloc 創(chuàng)建對(duì)象况芒,分配空間

* init (initWithNibName) 初始化對(duì)象惜纸,初始化數(shù)據(jù)

* loadView 從nib載入視圖 ,除非你沒有使用xib文件創(chuàng)建視圖

* viewDidLoad 載入完成,可以進(jìn)行自定義數(shù)據(jù)以及動(dòng)態(tài)創(chuàng)建其他控件

* viewWillAppear視圖將出現(xiàn)在屏幕之前堪簿,馬上這個(gè)視圖就會(huì)被展現(xiàn)在屏幕上了

* viewDidAppear 視圖已在屏幕上渲染完成

* viewWillDisappear 視圖將被從屏幕上移除之前執(zhí)行

* viewDidDisappear 視圖已經(jīng)被從屏幕上移除,用戶看不到這個(gè)視圖了

* dealloc 視圖被銷毀皮壁,此處需要對(duì)你在init和viewDidLoad中創(chuàng)建的對(duì)象進(jìn)行釋放.

* viewVillUnload- 當(dāng)內(nèi)存過低椭更,即將釋放時(shí)調(diào)用;

* viewDidUnload-當(dāng)內(nèi)存過低蛾魄,釋放一些不需要的視圖時(shí)調(diào)用虑瀑。

8. 應(yīng)用生命周期中的幾個(gè)重要方法

* 啟動(dòng)但還沒進(jìn)入狀態(tài)保存 :- (BOOL)application:(UIApplication*)application willFinishLaunchingWithOptions:(NSDictionary*)launchOptions * 基本完成程序準(zhǔn)備開始運(yùn)行:- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions* 當(dāng)應(yīng)用程序?qū)⒁敕腔顒?dòng)狀態(tài)執(zhí)行,應(yīng)用程序不接收消息或事件滴须,比如來(lái)電話了:- (void)applicationWillResignActive:(UIApplication*)application * 當(dāng)應(yīng)用程序入活動(dòng)狀態(tài)執(zhí)行舌狗,這個(gè)剛好跟上面那個(gè)方法相反:- (void)applicationDidBecomeActive:(UIApplication*)application? * 當(dāng)程序被推送到后臺(tái)的時(shí)候調(diào)用。所以要設(shè)置后臺(tái)繼續(xù)運(yùn)行扔水,則在這個(gè)函數(shù)里面設(shè)置即可:- (void)applicationDidEnterBackground:(UIApplication*)application? * 當(dāng)程序從后臺(tái)將要重新回到前臺(tái)時(shí)候調(diào)用痛侍,這個(gè)剛好跟上面的那個(gè)方法相反:- (void)applicationWillEnterForeground:(UIApplication*)application? * 當(dāng)程序?qū)⒁顺鍪潜徽{(diào)用,通常是用來(lái)保存數(shù)據(jù)和一些退出前的清理工作:- (void)applicationWillTerminate:(UIApplication*)application

9. 判斷對(duì)象是否遵循了某協(xié)議以及代理是否實(shí)現(xiàn)了改代理方法

BOOLisProtocol = [self.delegateController conformsToProtocol:@protocol(TestPtotocol)]);BOOLisSEL =self.delegate && [self.delegate respondsToSelector:@selector(delegateSel:)]

10. 系統(tǒng)UINavigationController滑動(dòng)返回手勢(shì)取消

self.navigationController.interactivePopGestureRecognizer.enabled =NO;

11. 試圖坐標(biāo)轉(zhuǎn)換

// 將像素point由point所在視圖轉(zhuǎn)換到目標(biāo)視圖view中魔市,返回在目標(biāo)視圖view中的像素值- (CGPoint)convertPoint:(CGPoint)point toView:(UIView*)view;// 將像素point從view中轉(zhuǎn)換到當(dāng)前視圖中主届,返回在當(dāng)前視圖中的像素值- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView*)view;// 將rect由rect所在視圖轉(zhuǎn)換到目標(biāo)視圖view中,返回在目標(biāo)視圖view中的rect- (CGRect)convertRect:(CGRect)rect toView:(UIView*)view;// 將rect從view中轉(zhuǎn)換到當(dāng)前視圖中待德,返回在當(dāng)前視圖中的rect- (CGRect)convertRect:(CGRect)rect fromView:(UIView*)view;*例把UITableViewCell中的subview(btn)的frame轉(zhuǎn)換到controllerA中// controllerA 中有一個(gè)UITableView, UITableView里有多行UITableVieCell君丁,cell上放有一個(gè)button// 在controllerA中實(shí)現(xiàn):CGRectrc = [cell convertRect:cell.btn.frame toView:self.view];或CGRectrc = [self.view convertRect:cell.btn.frame fromView:cell];// 此rc為btn在controllerA中的rect或當(dāng)已知btn時(shí):CGRectrc = [btn.superview convertRect:btn.frame toView:self.view];或CGRectrc = [self.view convertRect:btn.frame fromView:btn.superview];

12. 方法的交換

* 實(shí)例方法+ (void)swizzleSelector:(SEL)originalSelector withSelector:(SEL)swizzledSelector {? ? Classclass= [selfclass];? ? ? ? Method originalMethod = class_getInstanceMethod(class, originalSelector);? ? Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);BOOLdidAddMethodInit=class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));if(didAddMethodInit) {? ? ? ? class_addMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));? ? }else{? ? ? ? method_exchangeImplementations(originalMethod, swizzledMethod);? ? }}*類方法+ (void)swizzleClassSelector:(SEL)originalSelector withClassSelector:(SEL)swizzledSelector {? ? Classclass= [selfclass];? ? ? ? Method originalMethod = class_getClassMethod(class, originalSelector);? ? Method swizzledMethod = class_getClassMethod(class, swizzledSelector);if((int)originalMethod !=0&& (int)swizzledMethod !=0) {? ? ? ? method_exchangeImplementations(originalMethod, swizzledMethod);? ? }}

13. 利用宏在擴(kuò)展類添加屬性

#define ASSOCIATED(propertyName, setter, type, objc_AssociationPolicy)\- (type)propertyName {\returnobjc_getAssociatedObject(self, _cmd);\}\\- (void)setter:(type)object\{\objc_setAssociatedObject(self,@selector(propertyName), object, objc_AssociationPolicy);\}

14. 漢字轉(zhuǎn)拼音

- (NSString*)stringToPinyin{if([selflength] >0) {NSMutableString*ms = [[NSMutableStringalloc] initWithString:self];if(CFStringTransform((__bridgeCFMutableStringRef)ms,0, kCFStringTransformMandarinLatin,NO)) {? ? ? ? }if(CFStringTransform((__bridgeCFMutableStringRef)ms,0, kCFStringTransformStripDiacritics,NO)) {//NSLog(@"pinyin: %@", ms);returnms;? ? ? ? }? ? }returnself;}

15. 給空間制定位置添加圓角

- (void)viewAddBezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii{UIBezierPath*maskPath = [UIBezierPathbezierPathWithRoundedRect:rect byRoundingCorners:corners cornerRadii:cornerRadii];CAShapeLayer*maskLayer = [[CAShapeLayeralloc] init];? ? maskLayer.frame =self.bounds;? ? maskLayer.path = maskPath.CGPath;self.layer.mask = maskLayer;}

16.已某個(gè)view截屏并生成Image

- (UIImage*)viewShot{UIGraphicsBeginImageContext(self.bounds.size);? ? [self.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage*image =UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();returnimage;}

17.Quartz2D相關(guān)

圖形上下是一個(gè)CGContextRef類型的數(shù)據(jù)。圖形上下文包含:1将宪,繪圖路徑(各種各樣圖形)2绘闷,繪圖狀態(tài)(顏色,線寬较坛,樣式印蔗,旋轉(zhuǎn),縮放燎潮,平移)3喻鳄,輸出目標(biāo)(繪制到什么地方去?UIView确封、圖片)1除呵,獲取當(dāng)前圖形上下文CGContextRefctx =UIGraphicsGetCurrentContext();2,添加線條CGContextMoveToPoint(ctx,20,20);3爪喘,渲染CGContextStrokePath(ctx);CGContextFillPath(ctx);4颜曾,關(guān)閉路徑CGContextClosePath(ctx);5,畫矩形CGContextAddRect(ctx,CGRectMake(20,20,100,120));6秉剑,設(shè)置線條顏色[[UIColorredColor] setStroke];7泛豪, 設(shè)置線條寬度CGContextSetLineWidth(ctx,20);8,設(shè)置頭尾樣式CGContextSetLineCap(ctx, kCGLineCapSquare);9,設(shè)置轉(zhuǎn)折點(diǎn)樣式CGContextSetLineJoin(ctx, kCGLineJoinBevel);10诡曙,畫圓CGContextAddEllipseInRect(ctx,CGRectMake(30,50,100,100));11臀叙,指定圓心CGContextAddArc(ctx,100,100,50,0, M_PI *2,1);12,獲取圖片上下文UIGraphicsGetImageFromCurrentImageContext();13价卤,保存圖形上下文CGContextSaveGState(ctx)14劝萤,恢復(fù)圖形上下文CGContextRestoreGState(ctx)

18.避免同時(shí)點(diǎn)擊多個(gè)Button

第一種全局方式:在AppDelegate中添加 [[UIButtonappearance] setExclusiveTouch:YES];第二種指定方式:button.exclusiveTouch =YES;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市慎璧,隨后出現(xiàn)的幾起案子床嫌,更是在濱河造成了極大的恐慌,老刑警劉巖胸私,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厌处,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡岁疼,警方通過查閱死者的電腦和手機(jī)阔涉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捷绒,“玉大人洒敏,你說(shuō)我怎么就攤上這事「砑荩” “怎么了凶伙?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)它碎。 經(jīng)常有香客問我函荣,道長(zhǎng),這世上最難降的妖魔是什么扳肛? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任傻挂,我火速辦了婚禮,結(jié)果婚禮上挖息,老公的妹妹穿的比我還像新娘金拒。我一直安慰自己,他們只是感情好套腹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布绪抛。 她就那樣靜靜地躺著,像睡著了一般电禀。 火紅的嫁衣襯著肌膚如雪幢码。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天尖飞,我揣著相機(jī)與錄音症副,去河邊找鬼店雅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贞铣,可吹牛的內(nèi)容都是我干的闹啦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼辕坝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亥揖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起圣勒,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摧扇,沒想到半個(gè)月后圣贸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扛稽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年吁峻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片在张。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡用含,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帮匾,到底是詐尸還是另有隱情啄骇,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布瘟斜,位于F島的核電站缸夹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏螺句。R本人自食惡果不足惜虽惭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛇尚。 院中可真熱鬧芽唇,春花似錦、人聲如沸取劫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谱邪。三九已至疚膊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虾标,已是汗流浹背寓盗。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工灌砖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人傀蚌。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓基显,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親善炫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撩幽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容