你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 小技巧大集合

iOS 小技巧大集合

編輯:IOS開發綜合

小知識點

iOS 9 中 navgationBar 自動將 self,view 推到底下

也就是 說 self.view.frame.origin.y = 0 的位置 就是 navigationBar.maxY 的位置

 tapGestureRecognizer.cancelsTouchesInView = NO;

在手勢初始化的時候加上這句就行了。

手勢和 button 同時存在,會優先識別手勢

// 學習小型控件的 使用

http://ios.9tech.cn/news/2013/0930/29208.html

一、UIActionSheet 行動表

二、UIAlertView 警告

三、UISlider 滑塊

四、UIProgressView 進度條

五、UISwitch開關

 

六、UISegmentedControl 分段控制

tableView 的 cell 這塊 view 的寬高是 320 * 44 ;

cell.contentView 這塊View 320 * 44

只是初始位置不一樣, 兩塊疊加

從下往上 默認有 8 的底部高度

不讓 cell 被選中

[tableView setselectionStyle:UItableViewSelectionStyleNone];

alertView 的textFieldAtIndex 可以取到當行的 textfield

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil];

alertView.alertViewStyle = UIAlertViewStylePlainTextInput;

alertView.tag = viewTag;

 

alertView.delegate = self;

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

UIPickView 三級聯動

圖片輪播器 刪除一張,立即按返回按鈕 , 控制器不會調用 dealloc 方法

即在控制器有操作的情況下,點擊返回是不會觸發 dealloc 方法

如果只是

preferredMaxLayoutWidth

支持多行文本分行屬性

 

UITextfield 可以選擇是否可以選中

定制 searchBar 的兩個屬性

_searchBar.autocorrectionType = UITextAutocorrectionTypeNo;

 

_searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;

[self.tabBarController.tabBar hideBadgeOnItemIndex:UserNormalControllerTalk];

LSApplicationQueriesSchemes

alipay

wechat

weixin

 

URL Sceme URL 白名單

 

設置在深色背景下狀態欄白字

設置在淺色背景下狀態欄黑色

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:NO];

 

 

 

JSBadgeView badgeView 的功能

JSBadgeView 可以直接浮現在 parentView 的一個位置上

JSBadgeView *badgeView = [[JSBadgeView alloc] initWithParentView:imageViewLeft alignment:JSBadgeViewAlignmentTopRight];

 

自定義導航欄背景和標題的顏色

[self.navigationController.navigationBarsetBarTintColor:[UIColorcolorWithRed:20/255.0green:155/255.0blue:213/255.0alpha:1.0]];

[self.navigationController.navigationBarsetTitleTextAttributes:[NSDictionarydictionaryWithObjectsAndKeys:[UIColorwhiteColor],UITextAttributeTextColor,nil]];

用 TitleTextAttributes 這個方法;

兩個控制器之間的轉換

 

[self transitionFromViewController:_messageList toViewController:_friendsList duration:0.2 options:UIViewAnimationOptionAllowAnimatedContent animations:nil completion:nil];

最簡單的添加四邊約束

[_webView mas_makeConstraints:^(MASConstraintMaker *make) {

make.edges.equalTo(self.view);

 

}];

UIControl 中控制水平和居中的方式

@property(nonatomic) UIControlContentVerticalAlignment contentVerticalAlignment; // how to position content vertically inside control. default is center

 

@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment; // how to position content hozontally inside control. default is center

 

iOS 7 新特性

在iOS 7中,蘋果引入了一個新的屬性,叫做[UIViewController setEdgesForExtendedLayout:],它的默認值為UIRectEdgeAll。當你的容器是navigation controller時,默認的布局將從navigation bar的頂部開始。這就是為什麼所有的UI元素都往上漂移了44pt。

self.translatesAutoresizingMaskIntoConstraints = NO;

AutoresizingMask 自動轉化為 約束 Constraints 默認為 yes ;

IB 會把他調整為 NO ,為此,需要在 IB 裡面勾選 SizeClass

MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];

constraintMaker 會追蹤到當前那一塊 View

 

//系統給的不帶參數的回調

 

@property(nonatomic,strong) dispatch_block_t buttonOneBlock;

通過控制分割線樣式來控制_tableView.separatorInset

UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)

//判斷攝像頭是否能用

BOOL Custom= [UIImagePickerController

 

isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

其中只有在程序強制退出或者來電時,取消點擊事件才會調用。

touchCancelled: withEvent:(UIEvent *)event

分別有多點觸控、搖一搖以及遠程操作(在iOS之後新增了3DTouch事件類型)

 

在view添加單擊手勢之後,原來的touchesEnded方法就無效了。最開始我一直認為view添加手勢之後,原有的touches系列方法全部無 效。但是在測試demo中,發現view添加手勢之後,touchesBegan方法是有進行回調的,但是moved跟ended就沒有進行回調

 

[UIFont fontWithName:button.titleLabel.font.fontName size:titleSize]方法會占用極大的內存(已反復試驗),每次都需要對Label進行處理。在此處請謹慎使用此方法,此變換效果也是其中一種可根據自行需求進行修改。有更好的方法可告知。

所以在UI 字體, button 等部分 能用 system 就用 system 節省內存

 

__WEAK_SELF_YLSLIDE

// slideTitleView 欄目button 點擊的監聽

// 滾動到指定的欄目下

_slideTitleView.slideTitleViewClickButtonBlock = ^(NSUInteger index){

 

if (weakSelf) {

 

__STRONG_SELF_YLSLIDE

CGRect frame = strongSelf.mainScrollview.bounds;

frame.origin.x = CGRectGetWidth(strongSelf.frame) * index;

 

[strongSelf.mainScrollview scrollRectToVisible:frame animated:NO];

[strongSelf visibleViewDelegateForIndex:index];

}

 

};

滾動至指定欄目下

[NSSet set] set 可以實現散列之間的相加相減

合理管理無序數組

 

Model 裡面做判斷 ; 做部分業務處理 ;

在 model 裡面調接口有挑戰

定義個性的時候 , 可以采用枚舉

cellType

在 .m 文件中定義一個

setCellType {

switch(cellType){

 

}

 

}

 

先需要 registerClass 或者 registerNib 就可以了

tableView 定制 cell 的另一種方法

[tableView dequeueReusableCellWithIdentifier:<#(nonnull NSString *)#> forIndexPath:<#(nonnull NSIndexPath *)#>]

如果需要使用這個方法,你必須使用配套的方法來一起用,下面兩個配套方法選其一:

-(void)registerNib:(UINib*)nibforCellReuseIdentifier:(NSString*)identifierNS_AVAILABLE_IOS(5_0);

-(void)registerClass:(Class)cellClassforCellReuseIdentifier:(NSString*)identifierNS_AVAILABLE_IOS(6_0);

 

3 比如你已經用NIB做了一個Cell,或者自定義了一個Cell。我們在你創建UITableView的時候,就可以順帶

self.tableView.backgroundColor=xxxx;

[self.tableViewregisterClass:[CustomCellclass]forCellReuseIdentifier:@"CustomCell"];

 

這樣你在

-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath這個方法裡,

你就可以省下這些代碼:

staticNSString*CellIdentifier=@"Cell";

UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:@"Cell"];

 

if(cell==nil){

cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefault

reuseIdentifier:CellIdentifier];

//設置你的cell

 

而只需要

UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:@"Cell"forIndexPath:indexPath];

那個可自動響應鍵盤的 ScrollView

 

TPKeyboardAvoidingScrollView

TPKeyboardAvoidingTableView

 

在cellForRowAtIndexPath中使用dequeueReuseableCellWithIdentifier:forIndexPath:獲取重用的cell,若無重用的cell,將自動使用所提供的class類創建cell並返回

 

// 試一下這個宏

#define PROPERTY_NAME(property) [[(@""#property) componentsSeparatedByString:@"."] lastObject]

本地驗證和 model 都放在用戶裡面

 

 

UIpickerView

UIdatepicker

MPMoviePlayerController 可以定制位置

MPMoviePlayerViewController 全屏

AVPlayer 自定義

但是 只能定義 MP4 蘋果的視頻;

需要些解碼器

C/C ++ 跨平台的

解碼器

FFmpeg 開源免費跨平台的視頻 和 音頻流方案

vlc

ffmpeg

強大的媒體播放器

textfield 上面的輸入框為 ToolBar

在 ToolBar 上面扔 UIBarbuttonItem 就行了

pickerView 可以作為 textfield 的 inputView

NSNumber 有值 轉化為字符串

ZPosition

zPosition就是cocos2d中我們常寫的z吧。就是各個layer顯示的次序。

zPosition不是放大縮小吧,是配置遮擋屬性,比如layer1和layer2在同一個父layer上,layer1的zPosition=1,layer2的zPosition=0,layer1就會擋住layer2

 

 

 

發起 NSSession

NSDictionary *headers = @{ @"accept": @"application/json",

@"content-type": @"application/json",

@"apix-key": @"您的apix-key" };

 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://a.apix.cn/apixlife/movie/movie?name=your_value&page=your_value&num=your_value"]

cachePolicy:NSURLRequestUseProtocolCachePolicy

timeoutInterval:10.0];

[request setHTTPMethod:@"GET"];

[request setAllHTTPHeaderFields:headers];

 

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request

completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

if (error) {

NSLog(@"%@", error);

} else {

NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;

NSLog(@"%@", httpResponse);

}

}];

[dataTask resume];

 

NSArrau 需要的容器 用 json 轉模型

把 jsonStr 裡面的值轉化為 NSString 就可以是 json 轉化了

即使 jsonStr 裡面的值對應是 NSArray, NSDictionary 也可以這麼操作

 

NSMutableArray *imageArray = [NSMutableArray arrayWithCapacity:0];

for(NSInteger i = 0; i<_imageArr.count - 1; i++){

[imageArray addObject:_imageArr[i + 1]];

}

[BillApi sendBillUploadBillRequestWithImagesArray:imageArray parameterOfimages:@"request" parametersDict:nil compressionRatio:0.6 succeedBlock:^(id operation, id responseObject) {

if ([responseObject[@"status"] integerValue] == 200 ) {

[self addBillCheckListWithDataDict:responseObject[@"data"]];

}

NSLog(@"=image==resonse%@",[NSString jsonStrWithData:responseObject]);

} failedBlock:^(id operation, NSError *error) {

[MBProgressHUD showError:@"網路正忙"];

NSLog(@"=image==error%@",error);

} uploadProgressBlock:^(float uploadPercent, long long totalBytesWritten, long long totalBytesExpectedToWrite) {

NSLog(@"=image====%f,==%lld,=%lld",uploadPercent,totalBytesWritten,totalBytesExpectedToWrite);

 

}];

 

iOS 9 多任務分屏功能

iOS 9的分屏操作是建立在多任務之下的,所以這一點我們沒有必要分開來說。實現這個操作十分簡單,首先運行某個應用程序,然後從屏幕右側向中間滑動便會彈出多任務程序卡,點擊其中一個便會在右側屏幕三分之一的位置打開。

  蘋果為iOS9增加了多任務分屏功能,不過蘋果此次推出的分屏多任務處理功能只能夠在iPad Air2上實現。

蘋果為多任務操作共優化了三個功能;

蘋果的多任務 , slide over 功能

調出多任務欄的功能;

 

1、Slide Over功能,可以讓用戶在兩個應用之間做到快速切換,該功能可在iPad Air、iPad Air2、iPad mini2、iPad mini3上實現。

 

Split View 功能:

2、 分屏顯示功能;

Split View功能,可將屏幕分成兩部分,同時運行兩個應用。兩個應用可以五五對半分屏,或者是三七分屏,兩個app能在同一屏幕上同時並行運作。也支持同一款應用的多界面,比如Safari浏覽器中可並排擺放兩個標簽頁。此功能目前只能在iPad Air2上實現。

 

  1. 畫中畫

     

    Picture in Picture功能,用戶在看視頻過程中如果想看或回郵件,視頻將以懸浮窗口的形式保留在屏幕上,大小和位置可任意調整。該功能在iPad Air、iPad mini上均可實現。

    GCD 的數據類型, 各種函數名中帶有 create\copy\new\retain 等字眼 , 都不需要使用這個數據的時候進行 release

    CF(core Foundation)的數據類型在 ARC 環境下 還是需要做 release .

    增加或者減少引用計數

    serial queues通過dispatch_queue_create創建,可以使用函數dispatch_retain和dispatch_release去增加或者減少引用計數。

    用快速打開搜索一個方法或者屬性可能會比較慢; 因為需要對整個項目進行索引或者搜索

    工程越大, 這會變得越糟糕;

    聰明的開發者 使用 xcode 使用技巧

    http://www.wtoutiao.com/p/18dpJzv.html

    xcode 基本操作

    http://www.360doc.com/content/14/1128/13/110467_428727981.shtml

     

    trick : 編輯斷點

    Condition : 設置斷點的觸發條件, 例如 i == 3

    Ignore: 設置斷點需要被忽略多少次才會中斷

    action 設置 action po 查看等

    siblings 姐妹;

    Touches系列方法會屏蔽button的點擊。

     

    itunes 可以 google 浏覽器 看蘋果中文的官方文檔

    release 版本 和 debug 版本, 版本上線時一定是 release 版本

    iOS 版本更新 , 1.獲取 itunes 上面的版本更新

    獲取app store上架版本號檢查

    與本地版本對照更新

    NSNumber 和 keyNote 畫圖

    size_t 類型

    %zd 格式符 z 和 d 連用 轉換成 size_t 類型;

     

    size _t為了增強程序的可移植性,便有了size_t,不同系統上,定義size_t可能不一樣。

    經測試發現,在32位系統中size_t是4字節的,在64位系統中,size_t是8字節的,這樣利用該類型可以增加程序移植性。

     

    size_t的定義

    它的定義在/usr/include/linux/types.h

    typedef_kernel_size_tsize_t;

     

    跟體系結構相關

    而__kernel_size_t定義在/usr/include/asm/posix_types.h

    安裝的是內核的源碼

    asm-i386/posix_types.h

    typedef unsigned int __kernel_size_t;

    asm-1a64/posix_types.h

    typedef unsigned long kernel_size_t;

     

    size_t一般用來表示一種計數,比如有多少東西被拷貝等。例如:sizeof操作符的結果類型是size_t,該類型保證能容納實現所建立的最 大對象的字節大小。 它的意義大致是“適於計量內存中可容納的數據項目個數的無符號整數類型”。所以,它在數組下標和內存管理函數之類的地方廣泛使用。

    // 寫外部聲明的字符串

    UIKIT_EXTERN NSString *const MJRefreshHeaderLastUpdatedTimeKey;

     

    runtime 機制簡答:

    首先說一下什麼是runtime:

    RunTime簡稱運行時。就是系統在運行的時候的一些機制,其中最主要的是消息機制。對於C語言,函數的調用 在編譯的時候會決定調用哪個函數( C語言的函數調用請看這裡 )。編譯完成之後直接順序執行,無任何二義性。OC的函數調用成為消息發送。屬於動態調用過程。在編譯的時候並不能決定真正調用哪個函數(事實證明,在編 譯階段,OC可以調用任何函數,即使這個函數並未實現,只要申明過就不會報錯。而C語言在編譯階段就會報錯)。只有在真正運行的時候才會根據函數的名稱找 到對應的函數來調用。

    舉例說明:

    比如你[obj makeText];

    則運行時就這樣的:

    首先,編譯器將代碼[obj makeText];轉化為objc_msgSend(obj, @selector (makeText));,在objc_msgSend函數中。首先通過obj的isa指針找到obj對應的class。在Class中先去cache中 通過SEL查找對應函數method(猜測cache中method列表是以SEL為key通過hash表來存儲的,這樣能提高函數查找速度),若 cache中未找到。再去methodList中查找,若methodlist中未找到,則取superClass中查找。若能找到,則將method加 入到cache中,以方便下次查找,並通過method中的函數指針IMP跳轉到對應的函數中去執行。

    類對象 中存儲都是減號 方法, 元類對象中存儲的都是加號方法;

    設置 tableView 的背景色

    1. tableView.backgroundColor=[UIColorblueColor];
    2. tableView.backgroundView=nil;
    3. 自定義動畫程式

      [self transitionFromViewController:_friendsList toViewController:_messageList duration:0.2 options:UIViewAnimationOptionAllowAnimatedContent animations:nil completion:nil];

      拿到 navigation appearance 的控制權 設置字符串的顏色 :setTitleTextAttributes

      星星 的渲染模式

      UIImageRenderingModeAlwaysTemplate

       

      設置 去除 navigationBar 上 的邊框 ;

      [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

      [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];

      UI坐標系的 翻轉;

      CGContextRotateCTM(currentContext, M_PI);

       

      CGContextScaleCTM(currentContext, -1, 1);

       

      CGContextTranslateCTM(currentContext,0, -image.size.height);

       
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved