1, 把tableview里cell的小對勾的顏色改成別的顏色?
_mTableView.tintColor = [UIColor redColor];
1419815807199742.jpg
2, 離屏渲染問題的本質(zhì)是什么?
首先離屏渲染指的是在GPU在當(dāng)前屏幕緩沖區(qū)以外開辟一個(gè)緩沖區(qū)進(jìn)行渲染操作.
當(dāng)使用圓角熔吗,陰影姆钉,遮罩的時(shí)候,圖層屬性的混合體被指定為在未預(yù)合成之前(下一個(gè)HSync信號(hào)開始前)不能直接在屏幕中繪制听诸,所以就需要屏幕外渲染坐求。
3, 影響二維碼掃描速度的難點(diǎn)是什么?
二維碼圖像的清晰度, 角度
對于AVFoundation來說蛇更,有兩個(gè)因素:
圖像分辨率
AVCaptureSession 可以設(shè)置 sessionPreset 屬性瞻赶,這個(gè)決定了視頻輸入每一幀圖像質(zhì)量的大小。
AVCaptureSessionPreset320x240
AVCaptureSessionPreset352x288
AVCaptureSessionPreset640x480
AVCaptureSessionPreset960x540
AVCaptureSessionPreset1280x720
AVCaptureSessionPreset1920x1080
掃描范圍
AVCaptureMetadataOutput 的 rectOfInterest 屬性來配置解析范圍
4, 移動(dòng)端click事件有300 ms的延遲響應(yīng)問題
歷史原因:
2007年蘋果發(fā)布首款iphone上IOS系統(tǒng)搭載的safari為了將適用于PC端上大屏幕的網(wǎng)頁能比較好的展示在手機(jī)端上派任,使用了雙擊縮放(double tap to zoom)的方案砸逊,比如你在手機(jī)上用瀏覽器打開一個(gè)PC上的網(wǎng)頁,你可能在看到頁面內(nèi)容雖然可以撐滿整個(gè)屏幕掌逛,但是字體师逸、圖片都很小看不清,此時(shí)可以快速雙擊屏幕上的某一部分豆混,你就能看清該部分放大后的內(nèi)容篓像,再次雙擊后能回到原始狀態(tài)动知。
雙擊縮放是指用手指在屏幕上快速點(diǎn)擊兩次,iOS 自帶的 Safari 瀏覽器會(huì)將網(wǎng)頁縮放至原始比例员辩。
原因就出在瀏覽器需要如何判斷快速點(diǎn)擊上盒粮,當(dāng)用戶在屏幕上單擊某一個(gè)元素時(shí)候,例如跳轉(zhuǎn)鏈接[](https://segmentfault.com/a/1190000000410773#)奠滑,此處瀏覽器會(huì)先捕獲該次單擊丹皱,但瀏覽器不能決定用戶是單純要點(diǎn)擊鏈接還是要雙擊該部分區(qū)域進(jìn)行縮放操作,所以宋税,捕獲第一次單擊后摊崭,瀏覽器會(huì)先Hold一段時(shí)間t,如果在t時(shí)間區(qū)間里用戶未進(jìn)行下一次點(diǎn)擊杰赛,則瀏覽器會(huì)做單擊跳轉(zhuǎn)鏈接的處理呢簸,如果t時(shí)間里用戶進(jìn)行了第二次單擊操作,則瀏覽器會(huì)禁止跳轉(zhuǎn)乏屯,轉(zhuǎn)而進(jìn)行對該部分區(qū)域頁面的縮放操作根时。
那么這個(gè)時(shí)間區(qū)間t有多少呢?在IOS safari下辰晕,大概為300毫秒啸箫。這就是延遲的由來。造成的后果用戶純粹單擊頁面伞芹,頁面需要過一段時(shí)間才響應(yīng)忘苛,給用戶慢體驗(yàn)感覺,對于web開發(fā)者來說是唱较,頁面js捕獲click事件的回調(diào)函數(shù)處理扎唾,需要300ms后才生效,也就間接導(dǎo)致影響其他業(yè)務(wù)邏輯的處理南缓。
解決方案:
1, fastclick.js 可以解決在手機(jī)上點(diǎn)擊事件的300ms延遲: 鏈接: https://github.com/ftlabs/fastclick
2, zepto.js 的touch模塊胸遇,tap事件也是為了解決在click的延遲問題
觸摸事件的響應(yīng)順序:
1、ontouchstart
2汉形、ontouchmove
3纸镊、ontouchend
4、onclick
解決300ms延遲的問題概疆,也可以通過綁定ontouchstart事件逗威,加快對事件的響應(yīng)
5, 導(dǎo)入自定義字體庫
1)、找到你想用的字體的 ttf 格式岔冀,拖入工程
2)凯旭、在工程的plist中增加一行數(shù)組,“Fonts provided by application”
3)、為這個(gè)key添加一個(gè)item罐呼,value為你剛才導(dǎo)入的ttf文件名
4)鞠柄、直接使用即可:label.font = [UIFont fontWithName:@"你剛才導(dǎo)入的ttf文件名" size:20.0];
6, 獲取一個(gè)視頻的第一幀圖片
- (UIImage*)videoOnePict:(NSString*)filepath{
NSURL *url = [NSURL URLWithString:filepath];
AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:url options:nil];
AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];
generate1.appliesPreferredTrackTransform = YES;
NSError *err = NULL;
CMTime time = CMTimeMake(1, 2);
CGImageRef oneRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err];
UIImage *one = [[UIImage alloc] initWithCGImage:oneRef];
return one;
}
7, 獲取視頻的時(shí)長
+ (NSInteger)getVideoTimeByUrlString:(NSString *)urlString {
NSURL *videoUrl = [NSURL URLWithString:urlString];
AVURLAsset *avUrl = [AVURLAsset assetWithURL:videoUrl];
CMTime time = [avUrl duration];
int seconds = ceil(time.value/time.timescale);
return seconds;
}
8, 刪除某個(gè)view所有的子視圖
[[someView subviews]
makeObjectsPerformSelector:@selector(removeFromSuperview)];
9, 刪除NSUserDefaults所有記錄
//方法一
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
//方法二
- (void)resetDefaults {
NSUserDefaults * defs = [NSUserDefaults standardUserDefaults];
NSDictionary * dict = [defs dictionaryRepresentation];
for (id key in dict) {
[defs removeObjectForKey:key];
}
[defs synchronize];
}
// 方法三
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName: [[NSBundle mainBundle] bundleIdentifier]];
10, 禁用系統(tǒng)滑動(dòng)返回功能
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]){
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
return NO;
}
11, 將一個(gè)image保存在相冊中
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
或者
#import <Photos/Photos.h>
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
changeRequest.creationDate = [NSDate date];
} completionHandler:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"successfully saved");
} else {
NSLog(@"error saving to photos: %@", error);
}
}];
12, UITextView中打開或禁用復(fù)制嫉柴,剪切厌杜,選擇,全選等功能
// 繼承UITextView重寫這個(gè)方法
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
// 返回NO為禁用计螺,YES為開啟
// 粘貼
if (action == @selector(paste:)) return NO;
// 剪切
if (action == @selector(cut:)) return NO;
// 復(fù)制
if (action == @selector(copy:)) return NO;
// 選擇
if (action == @selector(select:)) return NO;
// 選中全部
if (action == @selector(selectAll:)) return NO;
// 刪除
if (action == @selector(delete:)) return NO;
// 分享
if (action == @selector(share)) return NO;
return [super canPerformAction:action withSender:sender];
}
13, 將一個(gè)view保存為pdf格式
- (void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename{
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
[aView.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();
NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];
[pdfData writeToFile:documentDirectoryFilename atomically:YES];
NSLog(@"documentDirectoryFileName: %@",documentDirectoryFilename);
}
14, main()之前的加載時(shí)間
它可以通過以下方式來顯示期奔。
793918-a3499b494fd6c598.png
793918-1883d0d4d1ab9565.png
main()調(diào)用之后的加載時(shí)間
準(zhǔn)備階段,主要是圖片的解碼
布局階段危尿,-(void)layoutSubViews()
繪制階段,-(void)drawRect:(CGRect)rect
啟動(dòng)階段必要服務(wù)的啟動(dòng)馁痴、必要數(shù)據(jù)的創(chuàng)建和讀取谊娇。
優(yōu)化啟動(dòng)時(shí)間
內(nèi)嵌的dylib盡可能少,或者合并起來罗晕。
Rebase/Binding減少__DATA中需要修正的指針济欢。 對于oc來說減少 class, selector, category 這些元數(shù)據(jù)的數(shù)量,對與c++來說小渊,減少虛函數(shù)數(shù)量法褥。swift結(jié)構(gòu)體需要修正的比較少。
將不必須在+load中做的事延遲到+ initialize中酬屉。
不使用xib半等,直接用代碼加載首頁視圖。
release版不要用NSLog輸出呐萨。
啟動(dòng)時(shí)的網(wǎng)絡(luò)請求盡可能異步杀饵。