UI基础(一):从UIView这个最纯粹的容器开始

2017-04-29  本文已影响53人  指尖书法

UIKit坐标系

UIView简单介绍

  1. 所有的控件,都直接,或者间接继承UIView
  2. UIView是一个容器,里面可以添加其他的控件
  3. 我们可以通过UIView来制作一些最纯粹的界面

UIView的常见属性

UIView的常见方法

//1.获取View
    UILabel *label1 = [self.whiteView viewWithTag:1];

颜色UIColor

    float randomR =arc4random_uniform(255)/255.0; //oc中随机数函数
    float randomG =arc4random_uniform(255)/255.0;
    float randomB =arc4random_uniform(255)/255.0;
    UIColor *randomColor =[UIColor colorWithRed:randomR green:randomG blue:randomB alpha:1];

动画初体验

    //开始动画
    [UIView beginAnimations:nil context:nil];
    //修改动画的各种属性
    [UIView setAnimationDuration:3];
    [UIView setAnimationDelay:2];
    
    //赋值回去
    creaeView.frame=oldFrame;
    
    //提交动画
    [UIView commitAnimations];
    [UIView animateWithDuration:3 animations:^{
        creaeView.frame=oldFrame;
    }];

按钮的使用

  1. 按钮默认的type是system 当设置了image以后就是custom 我们一般使用custom
  2. 设置background图片,是在文字的后面
  3. 按钮有很多种状态
    默认default:可以设置一套样式
    点击以后是highlighted:可以设置另外一套样式
    selected:需要使用代码设置
    disable:禁用状态
  4. 使用代码创建按钮 如果想要设置不同状态的样式,需要分别进行设置, 代码量较大
  5. 使用代码添加点击事件addTarget方法

UIImageView

修改控件的位置、大小

不能直接赋值frame.origin.x = 0;
需要整体赋值:

//1.获取原始Frame
    CGRect oldFrame=self.tankImageView.frame;
    
    //2.判断tag值-并且修改frame
    switch (sender.tag) {
        case 1://向上
            oldFrame.origin.y-=10;
            break;
        case 2://向下
            oldFrame.origin.y+=10;
            break;
        case 3://向右
            oldFrame.origin.x+=10;
            break;
        case 4://向左
            oldFrame.origin.x-=10;
            break;
            
        default:
            break;
    }
    
    //3.使用动画的方式设置Frame给控件
    [UIView animateWithDuration:1 animations:^{
        self.tankImageView.frame=oldFrame;
    }];

transform属性相关

 CGAffineTransformMakeRotation(<#CGFloat angle#>)直接修改旋转角度
 CGAffineTransformMakeScale(<#CGFloat sx#>, <#CGFloat sy#>)直接修改缩放
 CGAffineTransformMakeTranslation(<#CGFloat tx#>, <#CGFloat ty#>)修改位
 CGAffineTransformMake(<#CGFloat a#>, <#CGFloat b#>, <#CGFloat c#>, <#CGFloat d#>, <#CGFloat tx#>, <#CGFloat ty#>)参数最多,的可定制型最强,用的不多置
 CGAffineTransformRotate(self.tankImageView.transform, M_PI_4);
 CGAffineTransformScale(self.tankImageView.transform, M_PI_4);
 CGAffineTransformTranslation(self.tankImageView.transform, M_PI_4);

M_PI M_PI_2 M_PI_4 分别 对应 π π/2 π/4

初次接触代码创建控件

自定义button 和View的创建

#warning viewDidLoad 在控制器的View 创建好加载到内存中的时候,就会执行
//一般在这里,可以初始化数据,或者创建控件,等等
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //1.创建某一个种type的按钮
    UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
    
    //2.frame
    btn.frame=CGRectMake(100, 100, 100, 100);
    
    //3.设置文字
    [btn setTitle:@"WC" forState:UIControlStateNormal];
    
    //4.设置文字颜色
    [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    
    //5.设置背景图片
    [btn setBackgroundImage:[UIImage imageNamed:@"tank"] forState:UIControlStateNormal];
    //6.设置图片
//    [btn setImage:[UIImage imageNamed:@"joystick"] forState:UIControlStateNormal];
    
    //7.绑定方法(事件)
    [btn addTarget:self action:@selector(doSomeThing) forControlEvents:UIControlEventTouchUpInside];
    
    //8.添加到控制器的View上面
    [self.view addSubview:btn];
    
}

-(void)doSomeThing{
    NSLog(@"今天天气棒棒哒");
}

//1.代码创建控件--UIView
- (IBAction)createUIView {
    //1.alloc init一个
    UIView *createView=[[UIView alloc]init];
    
    //2.修改frame
    createView.frame=CGRectMake(100, 100, 100, 100);
    
    //3.设置一个颜色
    createView.backgroundColor=[UIColor purpleColor];
        
    //4.添加到控制器的View上面
    [self.view addSubview:createView];
}

控件的一些注意点

第一次使用plist文件和懒加载 优化数据结构

model.m

 - (instancetype)initWithDic:(NSDictionary *)dic{
    if (self=[super init]) {
        self.desc=dic[@"desc"];
        self.icon=dic[@"icon"];
    }
    return self;
}

viewController.m

self.label.text = model.desc;
-(NSArray *)pictures{
    //如果为空 那么就是没有值,需要初始化
    if (_pictures==nil) {
        //0.使用plist 配合bundle 读取数据
        //0.1获取bundle
        NSBundle *mainBundle=[NSBundle mainBundle];
        //0.2获取路径
        NSString *path=[mainBundle pathForResource:@"images.plist" ofType:nil];
        //0.3初始化数组
        _pictures=[NSArray arrayWithContentsOfFile:path];
    }
    return _pictures;
}

程序启动的简单原理

1. stroryboard 启动设置

  1. 可以拖拉箭头,修改默认的启动的界面,也可以通过 is initial ViewController 属性来设置
  1. 在storyboard中,的控制器,如果想要跟代码建立联系,需要设置customClass
  1. 在项目的设置界面,可以指定,使用哪一个.storyboard作用默认的启动界面,当项目启动的时候,就回去这个.storyboard中找箭头指向的控制器,如果找不到,报错,黑色
  2. 如果添加了多个storyboard,默认会找到,项目设置中设置的那个storyboard
  3. 删除项目文件的时候,
    中间的选项,是删除引用,文件还在,
    第三个选项是,直接删除到回收站

2. stroryboard 的本质

  1. 这种格式叫做 xml 使用 标签的形式标示一些信息
  2. storyboard中托拉拽的本质,其实是修改storyboard文本中的内容
    每一个使用拖拉方式添加的控件信息,全部保存在了文本中(xml)标签的形式
  3. 添加多个控件,只是增加文本的值而已

3 .程序的启动原理_简单版本

1.main.m中的main函数
2.UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
3.找到设置好的 xxx.storyboard
4.创建箭头所指的控制器
5.读取storyboard中的所有文本值,创建对应的控件 ,添加到 控制器的View中
6.当storyboard读取完毕以后,调用viewDidLoad 方法
7.呈献给用户

Bundle

一.什么是Bundle

二.图片位置的区别

  1. 放在images.xcassets中(xcassets.xcassets)打包以后,会到Assets.car中,无法还原出来(目前为止)更加安全

三.NSBundle

  1. mainBundle这个类方法 可以获取当前应用程序的xx.app
  2. bundle中的所有文件的全路径,我们都可以通过pathForResource来获取
  3. 可以直接把文件的后缀,拼接到文件名的后面

四.plist文件

  1. 可以用来保存字典
  2. 项目中的plist文件 保存的位置是 bundle中 (bundle去获取他)
  3. 在开发中,可以使用plist文件,把数组跟代码剥离开来

使用UIImageView 来播放动画

  1. 可以用来展示单张图片
  2. 也可以用来播放动画
  3. 播放动画的方法
 - (void)startAnimating;
 - (void)stopAnimating;
 - (BOOL)isAnimating;
  1. 用来存放动画图片的属性
    @property(nonatomic,copy) NSArray *animationImages;
  2. 两个属性
    @property(nonatomic) NSTimeInterval animationDuration; //持续时间@property(nonatomic) NSInteger animationRepeatCount //播放次数

IOS开发中内存的处理细节

  1. 开发IOS项目,如果APP占用内存过大,IOS系统会发送一个警告给应用程序
  2. 程序员可以在警告中,释放内存
  3. 如果发送了警告以后,APP的内存占用没有任何的改变,那么会---闪退

UIimage加载图片的几种方式

  1. UIimage imageName:图片名 使用这种方式加载的图片 会在内存中常驻。
    一般都是按钮的背景图,小箭头 icon 等等 UI界面上的小元素 使用这种方式
    对于需要释放的图片 使用另外的方式:
  2. UIImage imageWithContentsOfFile:路径名
    使用这种方式加载的图片,只有当没有任何一个对象对他进行强引用的时候,才会释放
  3. 图片的强引用和释放
    播放第一个动画的时候,UIimageView的图片属性 对加载到内存中的图片强引用了
    播放第二个动画,第一组图片被释放了,第二组图片被强引用

延迟调用方法

可以延迟具体的时间调用某一个方法
[self performSelector:@selector(cleanImage) withObject:nil afterDelay:60];

上一篇下一篇

猜你喜欢

热点阅读