iOS 小技巧集结号

来源:互联网 发布:地摊叫卖录音软件 编辑:程序博客网 时间:2024/05/01 22:48

小知识点

 iOS 9 中 navgationBar 自动将 self,view 推到底下

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

 


         iOS,手势和Button共存,button动作被屏蔽怎么办。

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 = [[UIAlertViewalloc] initWithTitle:titlemessage:message delegate:selfcancelButtonTitle:@"取消"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];

<key>LSApplicationQueriesSchemes</key>

    <array>

        <string>alipay</string>

        <string>wechat</string>

        <string>weixin</string>

    </array>

URL Sceme URL 白名单


设置在深色背景下状态栏白字

设置在浅色背景下状态栏黑色

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




JSBadgeView  badgeView 的功能

JSBadgeView 可以直接浮现在 parentView 的一个位置上

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


自定义导航栏背景和标题的颜色

[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:20/255.0 green:155/255.0 blue:213/255.0 alpha:1.0]];  

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],UITextAttributeTextColor,nil]];  

用 TitleTextAttributes 这个方法;

两个控制器之间的转换


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

最简单的添加四边约束

 [_webViewmas_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.mainScrollviewscrollRectToVisible: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 *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0); 

- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);


3  比如你已经用NIB做了一个Cell,或者自定义了一个Cell。我们在你创建UITableView的时候,就可以顺带 

self.tableView.backgroundColor = xxxx; 

[self.tableView registerClass:[CustomCell class] forCellReuseIdentifier:@"CustomCell"];


这样你在

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath这个方法里,

你就可以省下这些代码: 

    static NSString *CellIdentifier = @"Cell"; 

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];


  if (cell == nil) {         

  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 

        reuseIdentifier:CellIdentifier];       

  //设置你的cell 

  }


而只需要 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"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 = [NSMutableArrayarrayWithCapacity:0];

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

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

        }

        [BillApisendBillUploadBillRequestWithImagesArray:imageArrayparameterOfimages:@"request"parametersDict:nilcompressionRatio:0.6succeedBlock:^(id operation,id responseObject) {

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

                [selfaddBillCheckListWithDataDict:responseObject[@"data"]];

            }

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

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

            [MBProgressHUDshowError:@"网路正忙"];

             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_t size_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 =[UIColor blueColor];  
  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);

0 0
原创粉丝点击