拾遗系列(一)之UIView

说明:此系列只是本人在系统化夯实IOS基础时的一些记录。内容可能比较零散,也不是对某一点内容进行系统化的阐述。

添加、删除控件

[self.view addSubview:blueView];//self.view中添加blueView
[blueView removeFromSuperview];//从父控件中删除blueView
有时在有些需要中需要动态的增减控件

父控件可以通过tag值,获取子控件。

-(UIView *)viewWithTag:(NSInteger)tag;//此tag可返回自己,若有多个相同tag则返回找到的第一个
clickToBound = YES; //按边裁剪。超出父控件区域的子控件不显示。

延时操作的两种方法

1.[self performSelector:(SEL) withObject:()id afterDelay:(NSTimeInterval)];
2.dispatch_after

plist使用,用来存储NSArray 、NSDictionary

加载plist数据:
NSString *file = [[NSBundle mainBundle]pathForResources:@"shops" ofType:@"plist"];
[NSArray arrayWithContensOfFile:file];

Xcode一些知识点

  • xcode中黄色文件夹都是虚拟的(group),而蓝色文件夹是确实存在的

  • 从其他项目拷贝的文件有时提示找不到文件,应该查看:Build Phase ->Copy Bundle Resources,哪些文件已经加入到Bundle中

  • <# #> 可用于代码块的设置
如:
@property (nonatomic,strong) <#type#> *<#name#>;

用initWith初始化时返回的是instancetype类型,而不是id

  • instancetype在类型上与id一样 ,可以表示任何对象类型。只能用在返回值类型上,不能像id一样用在参数类型上。
  • instancetype会被编译器检查真实类型。
  • 返回id,那么其可以转化的任意类,容易出错。
    如: 返回的对象是UILabel,但是返回的是id。因此可使用
id label = [[UILable alloc]initWithFrame:frame];
NSString *test = (NSString *)label;
NSLog(@"%@",test.length);//只有在执行的时候才会出错

UIView封装注意点

  • init中初始化各个子控件,但无需设置各个子控件的frame。而是在layoutSubviews中设置子控件的frame。
    layoutSubviews 。布局子控件,一般在这里设置子控件的frame,当控件本身尺寸发生改变时,系统或自动调用这个方法。可用来监听控件尺寸改变。

  • 一般重写initWithFrame方法,不直接重写init方法,因为init方法内部会调用initWithFrame方法。

  • 如果一个view内部子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心。外界可以传入对应模型数据给view,view拿到数据后给子控件设置相应数据。

传入模型
-(void)setModel:(SDHModel)model {
    _model = model;
    //设置各个控件title
}

加载xib文件

1.NSArray *objs = [[NSBundle mainBundle]loadNibName:@"Test" owner:nil options:nil];
一个UINib对象代表一个xib文件
2.UINib *nib = [UINib nibWithNibName:@"Test" bundle:[NSBundle mainBundle]];//一般情况下参数:bundle为nil,则默认为mainBundle
NSArray *objs = [nib instanctiateWithOwner:nil options:nil];

UIScrollview

  • 1.contentsize属性:scrollview的内容大小,滚动范围。内容偏移量,当前显示的内容的顶点相对此控件顶点的x、y距离,默认为CGPointZero
    如果想禁止某个方向的滚动,那么就直接设置width或者height = 0

  • 2.contentOffset属性:表示UIScrollView滚动位置(即内容左上角与scrollview左上角的间距值)

scrollView.contentOffset = CGPointMake(a,b);
  • 3.contentInset属性:这个属性在UIDcrollview的四周增加额外滑动区域

UIScrollView代理:监听整个滚动过程

一般监听可以使用addTarget、delegate、KVO。可以优先考虑addTarget。

- [self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];//让子控件都执行删除方法(或其他方法)

动画

1.[UIView animateWithDuration:2.0 animations:^{ … }];
2.[UIView beginAnimations:nil context:nil];
[UIView commitAnimations];

区分initWithFrame、initWithCode、awakeFromNib

  • UIView用xib描述,若直接使用[[UIView alloc]init]方法系统不回去加载同名的xib,必须使用loadNibName。而控制器不同。[UIViewController alloc]init 会自动加载同名的xib文件。
  • 通过xib加载资源时,系统是调用的[[UIView alloc]initWithCode:coder]而不是initWithFrame ,其中coder是xib解释器。也会调用awakeFromNib,控件从xib、storyboard中创建完毕后调用此方法。若想对控件创建完毕后的初始化操作应该执行awakeFromNib。

监听控制器(viewController)view点击

-(void)touchBegan:(NSSet)touches withEvent:(UIEvent *)event;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值