iOS開發(fā)小技巧及小知識(shí)點(diǎn)

1、Category(類別)

什么是Category

1、Category可以在不獲悉不改變?cè)a的情況下向已有的類中添加方法,從而達(dá)到擴(kuò)展已有類的目的,但是只能添加方法,不建議刪除和修改(會(huì)導(dǎo)致bug)。

2、無(wú)法向Category中添加實(shí)例變量,Category通常作為一種組織框架代碼的工具來(lái)使用。

3、如果Category和原始類中的方法名稱沖突,則Category將覆蓋原始類的方法,因?yàn)镃ategory具有更高的優(yōu)先級(jí)。

Category的作用:

1、將類的實(shí)現(xiàn)分散到多個(gè)不同文件或不同框架中。

2、創(chuàng)建對(duì)私有方法的前向引用。

3、向?qū)ο筇砑臃钦絽f(xié)議。

2、關(guān)于日期(NSDate)的幾個(gè)常用方法

NSDateFormatter?*FM?=?[[NSDateFormatter?alloc]?init];

FM.dateFormat?=?@"yyyy-MM-dd?HH:mm:ss";

NSDate?*date1?=?[FM?dateFromString:@"2016-12-20?00:00:00"];

NSDate?*date2?=?[FM?dateFromString:@"2016-12-21?00:00:00"];

//date1與當(dāng)前時(shí)間的差(單位:秒)

NSTimeInterval?second1?=?[date1?timeIntervalSinceNow];

//date1與1970-1-1?08:00:00時(shí)間的差(單位:秒)

NSTimeInterval?second2?=?[date1?timeIntervalSince1970];

//date1與2001-1-1?08:00:00時(shí)間的差(單位:秒)

NSTimeInterval?second3?=?[date1?timeIntervalSinceReferenceDate];

//date1與date2的差(單位:秒)

NSTimeInterval?second4?=?[date1?timeIntervalSinceDate:date2];

//返回比較早的那個(gè)時(shí)間

NSDate?*earlyDate?=?[date1?earlierDate:date2];

//返回比較晚的那個(gè)時(shí)間

NSDate?*laterDate?=?[date1?laterDate:date2];

//判斷兩個(gè)時(shí)間是否相等

BOOL?isEqual?=?[date1?isEqualToDate:date2];

//返回當(dāng)前時(shí)間10秒后的時(shí)間

NSDate?*date01?=?[NSDate?dateWithTimeIntervalSinceNow:10];

//返回1970-1-1?08:00:00時(shí)間10秒后的時(shí)間

NSDate?*date02?=?[NSDate?dateWithTimeIntervalSince1970:10];

//返回2001-1-1?08:00:00時(shí)間10秒后的時(shí)間

NSDate?*date03?=?[NSDate?dateWithTimeIntervalSinceReferenceDate:10];

//返回date2時(shí)間10秒后的時(shí)間

NSDate?*date04?=?[NSDate?dateWithTimeInterval:10sinceDate:date2];

//隨機(jī)返回一個(gè)比較遙遠(yuǎn)的未來(lái)時(shí)間

NSDate?*date05?=?[NSDate?distantFuture];

//隨機(jī)返回一個(gè)比較遙遠(yuǎn)的過去時(shí)間

NSDate?*date06?=?[NSDate?distantPast];

3、圖片拉伸

//先對(duì)圖片設(shè)置拉伸程度

UIImage?*image?=?[UIImage?imageNamed:@"pic.png"];

image?=?[image?stretchableImageWithLeftCapWidth:10topCapHeight:5];

//將圖片顯示出來(lái)

UIImageView?*imageView?=?[[UIImageView?alloc]?initWithFrame:CGRectMake(10,100,100,50)];

imageView.image?=?image;

[self.view?addSubview:imageView];

1-?(UIImage?*)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth?topCapHeight:(NSInteger)topCapHeight

這個(gè)函數(shù)是UIImage的一個(gè)實(shí)例函數(shù),它的功能是創(chuàng)建一個(gè)內(nèi)容可拉伸,而邊角不拉伸的圖片,需要兩個(gè)參數(shù),第一個(gè)是左邊不拉伸區(qū)域的寬度,第二個(gè)是上面不拉伸的高度。

注意:可拉伸的范圍都是距離leftCapWidth后的1豎排像素,和距離topCapHeight后的1橫排像素,而圖像后面的剩余像素也不會(huì)被拉伸。

比如參數(shù)指定10,5。那么,圖片左邊10個(gè)像素,上邊5個(gè)像素。不會(huì)被拉伸,x坐標(biāo)為11和一個(gè)像素會(huì)被橫向復(fù)制,y坐標(biāo)為6的一個(gè)像素會(huì)被縱向復(fù)制。

4、APP跳轉(zhuǎn)/跳轉(zhuǎn)至系統(tǒng)APP

跳轉(zhuǎn)前設(shè)置:

1、在將要跳轉(zhuǎn)到的APP中TARGETS--info--URL Types中添加URL Schemes;

2、在本APP的info.plist中添加一個(gè)LSApplicationQueriesSchemes數(shù)組字段,把對(duì)方的APP的URL Schemes添加進(jìn)去

//跳轉(zhuǎn)到系統(tǒng)app

url?=?@"tel://1234567"http://撥打電話

url?=?@"sms://1234567"http://發(fā)短信

url?=?@"http://www.baidu.com"http://Safari

url?=?@"mailto://admin@abt.com"http://郵箱

url?=?@"maps://"http://地圖

url?=?@"facetime://1234567"http://FaceTime

//跳轉(zhuǎn)到系統(tǒng)設(shè)置

url?=?UIApplicationOpenSettingsURLString//適用于iOS?>=?8

url?=?@"Prefs:root=General"http://適用于iOS?<?10

//跳轉(zhuǎn)第三方APP

url?=?@"要跳轉(zhuǎn)的app的URL?Schemes"

//開始跳轉(zhuǎn)

if([[UIApplication?sharedApplication]?canOpenURL:[NSURL?URLWithString:url]])?{

if(IOS_10)?{

[[UIApplication?sharedApplication]?openURL:URL?options:@{}?completionHandler:nil];

}else{

[[UIApplication?sharedApplication]?openURL:URL];

}

}

5、UIView中的坐標(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):

CGRect?rc?=?[cell?convertRect:cell.btn.frame?toView:self.view];

CGRect?rc?=?[self.view?convertRect:cell.btn.frame?fromView:cell];

//?此rc為btn在controllerA中的rect

或當(dāng)已知btn時(shí):

CGRect?rc?=?[btn.superview?convertRect:btn.frame?toView:self.view];

CGRect?rc?=?[self.view?convertRect:btn.frame?fromView:btn.superview];

6、修改Xcode代碼自動(dòng)生成版權(quán)信息Copyright ? 2017年 XXX. All rights reserved

如圖,就是修改這個(gè)

?修改方法:打開.xcodeproj工程文件,顯示包含內(nèi)容,會(huì)看到一個(gè)project.pbxproj文件,打開此文件修改 ORGANIZATIONNAME = "xxx";

7、iOS讓button的文字局左或局右對(duì)齊

我們首先想到的方法是這個(gè)

1button.titleLabel.textAlignment?=?NSTextAlignmentLeft;

突然發(fā)現(xiàn)這是無(wú)效的,下面正確的設(shè)置方式:

button.contentHorizontalAlignment?=?UIControlContentHorizontalAlignmentLeft;//局左

button.contentHorizontalAlignment?=?UIControlContentHorizontalAlignmentRight;//局右

8、去除searchBar的灰色背景

近日,在做搜索框UISearchBar的時(shí)候,把searchBar放在導(dǎo)航欄的titleView上,當(dāng)進(jìn)入下一頁(yè)然后再返回本頁(yè)的時(shí)候searchBar的灰色背景會(huì)閃一下,那么怎么去除這個(gè)灰色背景呢?

調(diào)用如下方法即可去除灰色背景,哈哈。。。

-?(void)removeSearchBarGrayBackColor

{

for(inti?=0;?i?<?self.searchBar.subviews.count;?i++)?{

UIView?*backView?=?self.searchBar.subviews[i];

if([backView?isKindOfClass:NSClassFromString(@"UISearchBarBackground")])?{

[backView?removeFromSuperview];

[self.searchBar?setBackgroundColor:[UIColor?clearColor]];

break;

}else{

NSArray?*?arr?=?self.searchBar.subviews[i].subviews;

for(intj?=0;?j?<?arr.count;?j++)?{

UIView?*barView?=?arr[i];

if([barView?isKindOfClass:NSClassFromString(@"UISearchBarBackground")])?{

[barView?removeFromSuperview];

[self.searchBar?setBackgroundColor:[UIColor?clearColor]];

break;

}

}

}

}

}

9、修改UITabbar頂部分割線顏色

//根據(jù)顏色生成一個(gè)圖片

CGRect?rect?=?CGRectMake(0,0,?SCREEN_WIDTH,0.3);

UIGraphicsBeginImageContext(rect.size);

CGContextRef?context?=?UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context,?LineColor.CGColor);

CGContextFillRect(context,?rect);

UIImage?*img?=?UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

//開始修改UITabbar頂部分割線顏色

[self.tabBar?setShadowImage:img];

[self.tabBar?setBackgroundImage:[Tools?imageWithColor:WHITECOLOR]];

10、壓縮圖片

創(chuàng)建一個(gè)UIImage的類

@interfaceUIImage?(Scale)

//壓縮圖片

-?(UIImage?*)imageByScalingToMaxSize:(UIImage?*)sourceImage;

@end

@implementation?UIImage?(Scale)

-?(UIImage?*)imageByScalingToMaxSize:(UIImage?*)sourceImage

{

CGFloat?maxWidth?=640;

if(sourceImage.size.width?<?maxWidth)?{

returnsourceImage;

}

CGFloat?btWidth?=0.0f;

CGFloat?btHeight?=0.0f;

if(sourceImage.size.width?>?sourceImage.size.height)?{

btHeight?=?maxWidth;

btWidth?=?sourceImage.size.width?*?(maxWidth?/?sourceImage.size.height);

}else{

btWidth?=?maxWidth;

btHeight?=?sourceImage.size.height?*?(maxWidth?/?sourceImage.size.width);

}

CGSize?targetSize?=?CGSizeMake(btWidth,?btHeight);

return[self?imageByScalingAndCroppingForSourceImage:sourceImage?targetSize:targetSize];

}

-?(UIImage?*)imageByScalingAndCroppingForSourceImage:(UIImage?*)sourceImage?targetSize:(CGSize)targetSize

{

UIImage?*newImage?=?nil;

CGSize?imageSize?=?sourceImage.size;

CGFloat?width?=?imageSize.width;

CGFloat?height?=?imageSize.height;

CGFloat?targetWidth?=?targetSize.width;

CGFloat?targetHeight?=?targetSize.height;

CGFloat?scaleFactor?=0.0;

CGFloat?scaledWidth?=?targetWidth;

CGFloat?scaledHeight?=?targetHeight;

CGPoint?thumbnailPoint?=?CGPointMake(0.0,0.0);

if(CGSizeEqualToSize(imageSize,?targetSize)?==?NO)?{

CGFloat?widthFactor?=?targetWidth?/?width;

CGFloat?heightFactor?=?targetHeight?/?height;

if(widthFactor?>?heightFactor)

scaleFactor?=?widthFactor;//?scale?to?fit?height

else

scaleFactor?=?heightFactor;//?scale?to?fit?width

scaledWidth??=?width?*?scaleFactor;

scaledHeight?=?height?*?scaleFactor;

//?center?the?image

if(widthFactor?>?heightFactor)?{

thumbnailPoint.y?=?(targetHeight?-?scaledHeight)?*0.5;

}elseif(widthFactor?<?heightFactor)?{

thumbnailPoint.x?=?(targetWidth?-?scaledWidth)?*0.5;

}

}

UIGraphicsBeginImageContext(targetSize);

CGRect?thumbnailRect?=?CGRectZero;

thumbnailRect.origin?=?thumbnailPoint;

thumbnailRect.size.width??=?scaledWidth;

thumbnailRect.size.height?=?scaledHeight;

[sourceImage?drawInRect:thumbnailRect];

newImage?=?UIGraphicsGetImageFromCurrentImageContext();

if(newImage?==?nil)?NSLog(@"could?not?scale?image");

UIGraphicsEndImageContext();

returnnewImage;

}

@end

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

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

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