iOS开发小技巧归纳

来源:互联网 发布:找房子软件 编辑:程序博客网 时间:2024/06/05 03:10

本文主要收集开发中的小技巧,文章主要的形式为列表,逐条归纳总结:

1、搭建一个app的框架的时候,对于tabBarController的一个子视图控制器,经常会设置tabBarItem的title,和navigationController的title,我们往往需要进行两条代码去说明:
viewController.tabBarItem.title = @"Home";navigationController.title = @"Home";// navigationController是viewController的导航控制器
其实,这两句代码等价于
viewController.title = title;

2、颜色随机操作
viewController.view.backgroundColor = [UIColor colorWithRed:(arc4random()%256)/255.0 green:(arc4random()%256)/255.0 blue:(arc4random()%256)/255.0 alpha:1.0];
arc4random的使用:arc4random()%256表示在[0,256)之间取值,可以取到0,不可以取到256,这恰恰符合RGB颜色取值0到1

3、对于UIButton、UIView等对象尺寸位置方面的属性,除了frame外,其他的属性(size、origin、x、y、width、height)是不能通过赋值进行修改的,所以进行修改的时候必须要先创建一个临时CGRect变量,然后将对象的frame赋值给这个变量,修改这个变量的值后,将这个变量的赋值给对象的frame属性,通过这种方式来修改:
    CGRect tempFrame = self.frame;    tempFrame.origin = origin;    self.frame = tempFrame;
如果在程序中有大量的这种代码,那么我们就需要使用一种小技巧,为UIButton或者是UIView等创建一个分类Category,将这种取出又放入的代码放到setter方法中去,然后暴露出orign、size、x、y、width、height这些属性,接着就简化了赋值方式:
    button.size = CGSizeMake(10, 10);

4、自定义textField的时候,有时候需要设置左边有个图标,那么会使用到leftView这个属性,但是设置完成后会发现显示不了,那是因为这个属性是一个状态属性,也就是说同时textField提供了leftViewMode这个属性,默认情况下是从不显示的
UIWindow *window = [[UIApplication sharedApplication].windows lastObject];

,需要手动去设置更改

5、调整button中的各种控件的时候,有时候会使用到setTtileEdgeInsets、setImageEdgeInsets等方法,通过名字可以看出,edge是边缘,inset是插入,就是从上下左右去插入一定的距离,那么如果想要使得控件向左移动,就需要在右边插入距离。

6、使用这段代码进行frame的转化
// 由于screen的bounds中的x和y是0,恰好是view中的frame所需要的值    view.frame = [UIScreen mainScreen].bounds;

7、iphone上面有个小悬浮控件,永远是在所有的windows上面,那它是怎么做到的呢?这个控件应该是被添加到最上层的window上面的,所以最关键的是怎么去获取到最上面的window:
UIWindow *window = [[UIApplication sharedApplication].windows lastObject];

8、
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
等价于:
UIButton *button = [[UIButton alloc]init];

9、对于tableViewController,调用self和tableView是一样的:
    UITableViewController *tableViewController = [[UITableViewController alloc]init];    NSLog(@"%@",tableViewController.view);    NSLog(@"%@",tableViewController.tableView);

10、有时候对button的尺寸进行定制的时候,我们根据美工给的图片来进行设置:
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];    button.size = button.currentImage.size;

11、对于我们在项目中打印出来的东西,一般都是用来辅助我们调试的,那么如果我们的APP要上架,这时候就是发布模式(release),这时候就不需要在控制台打印出来的任何东西,我们可以这样设置来区别模式,将这段代码放到PCH文件里面去:
// 设定调试模式和发布模式的打印函数-->为了使得发布版本中是没有控制台打印的,从而可以减少消耗#ifdef DEBUG // 处于调试模式#define NTLog(...) NSLog(__VA_ARGS__)#else // 处于发布模式#define NTLog(...)#endif

12、对于很多项目,文件分类是非常重要的,这有助于以后后续的开发和调试维护,这里介绍两种比较常见的文件分类模式(对于以tarBarViewController为基础的项目):
(1)MVC ---> 模块
(2)模块----->MVC
这里的模块指的是tarBarViewController的每个控制器(每一个页面模块)

13、重构之同样的代码抽取为一个方法:将整个代码拷贝到方法中,然后将会改变的量设置为方法的参数

14、button的style在iOS7之后是没有明显的效果的,因为iOS7之后苹果的界面进行了大改变,从拟物化变为扁平化,系统中button都是只有文字,而没有边框的

15、在navigationController中通过使用appearence方法来得到一个代表,可以通过代表来设置所有的UIBarButtonItem的样式:
UIBarButtonItem *item = [UIBarButtonItem appearance];

16、在Xcode5之后,图片的拉伸模式可以通过直接对图片设置:
在Assets.xcassets中找到图片,然后查看属性(Attributes),在属性栏的最下面有一个Slicing属性,表示拉伸的时候怎么去操作,里面有四种模式None、Horizontial、Vertical、Horizontial and Vertical 。 选中相对的模式,Xcode自动去寻找合适的值,不需要我们进行修改,到是值得我们注意的一点是,对于不规则的一边,是不应该选择去拉伸的,例如上面是个不规则的箭头,那么就不要去设置Horizontial,否者就会导致形变。选中了相应的模式之后,还需要其中设置一项,是Center属性,一种是Tiles(平铺),另外一种是Stretches(伸展)

17、在storyboard中,每当调整imageView的时候,我们十分熟悉image在imageView显示的方式,在代码中对应的是ContentView属性

18、对于imageView,如果先创建,再添加image的话,是没有尺寸的:
UIImageView *imageView = [[UIImageView alloc]init];    UIImage *image = [UIImage imageNamed:@"image"];    imageView.image = image;    [self.view addSubview:imageView];
这样是不能够在self.view上显示的
    UIImage *image = [UIImage imageNamed:@"image"];    UIImageView *imageView = [[UIImageView alloc]initWithImage:image];    [self.view addSubview:imageView];
但是如果在创建的时候就制定image的话,那么就有尺寸了,这时候在self.view上就可以显示      

19、弹出的键盘也是一个window,window在一个 APP中是可以有很多个的,系统的窗口都是全屏的(虽然看上去键盘不是全屏的,但是他实际上是一个全屏的窗口)

20、frame都是相对于父控件的,有时候,父控件所在的坐标系并不是我们希望的坐标系,那么这个时候我们就需要改变坐标系:
(1)通过操作所指控件的frame
    [button.superview convertRect:button.frame toView:self.view.window];    [self.view.window convertRect:button.frame fromView:button.superview];
(2)通过操作所指控件的bounds
    [button convertRect:button.bounds toView:self.view.window];    [self.view.window convertRect:button.bounds fromView:button];












0 0
原创粉丝点击