您的位置:首页 > 产品设计 > UI/UE

iOS开发基础-UIView的使用

2016-03-25 10:36 435 查看
UIView的使用

UIView 原理

1.它是一个iOS开发中非常重要的类。

UILabel,UIButton,UIImageView父类或间接父类都是UIView,换句话说只要是界面上能看到的东西都是UIView

2.坐标系的属性和方法

@property(nonatomic) CGRect frame;

@property(nonatomic) CGRect bounds;

@property(nonatomic) CGPoint center;

@property(nonatomic) CGAffineTransform transform;

//另:frame bounds center三个属性相互关联,改变其中一个,另两个也会改变。

3.属性: 位置和大小, 背景颜色

方法: 显示和隐藏

把所有的控件的共同的属性和行为抽取出来, 形成了UIView视图类。

(1)位置frame

(2)背景颜色backgroundColor

(3)透明度alpha

(4)中心位置center

(5)设置大小bounds

(6)tag标签

(7)是否交互userInteractionEnabled

//是否与用户交互 默认YES

view.userInteractionEnabled = YES;

//UILabel UIImageView 默认交互是NO

//UIButton 默认交互是YES

(8)是否隐藏

//是否隐藏 默认是NO 如果是YES 相当于alpha = 0 隐藏后按钮不能被点击

view.hidden = NO;

4.视图层次感

【注】任何视图,都可以添加到另一个视图上面,但是每个视图只能有一个父视图。也就是说一个子视图被添加到另一个视图上,会从原父视图上脱离。

【注】子视图的坐标是相对于父视图的。以父视图左上角一点为原点。移动父视图,因为子视图的位置是相对的,所以会一起移动。

1.把view放在最上面bringSubviewToFront

2.把view放在最下面sendSubviewToBack

3.获取一个父视图superview(仅有一个)

//superview 拿到某视图的父试图

UIView *superView = redView.superview;

4.获取子视图数组(可以有多个)

//subviews拿到某视图所有的子视图

NSArray *arr = self.view.subviews;

5.销毁一个视图(removeFromSuperview)

6.子视图插入insertSubview

7.交换两个子视图(exchangeSubviewAtIndex)

//父试图可以改变子试图的层级关系

//把子试图放到最前面(上面)

[self.view bringSubviewToFront:redView];

//把子试图放到最后面(下面)
[self.view sendSubviewToBack:greenView];

//把某个子试图放到另一个子试图的上面
[self.view insertSubview:greenView aboveSubview:redView];
//把某个子试图放到另一个子试图的下面
[self.view insertSubview:greenView belowSubview:redView];

//把某个试图放到指定位置上
[self.view insertSubview:blueView atIndex:4];

//先添加的在最前面  数组元素的顺序是子视图显示的顺序
NSLog(@"%@",arr);

for (UIView * view in self.view.subviews) {
if ([view isKindOfClass:[UIView class]]) {
NSLog(@"是UIView");
}else if ([view isKindOfClass:[UIButton class]]){
NSLog(@"是按钮");
}
}

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 40, 10)];
label.text = @"label";
//任何视图都可以添加到任何试图上
[redView addSubview:label];

//把某视图从父视图移除 子试图调用这个方法 父试图不能主动移除子视图
[redView removeFromSuperview];
//如果这个试图移除了 它的子试图会一起移除


5.UIView动画

/————–非Block动画制作——————–/

/*

//UIView动画,由类方法驱动

//从这里开始是动画的结果

[UIView beginAnimations:nil context:nil];

//设置延迟时间

[UIView setAnimationDelay:15];

//设置代理

[UIView setAnimationDelegate:self];

//设置代理回调的方法

[UIView setAnimationDidStopSelector:@selector(completed)];

//动画结束后,self要调用completed

//设置动画执行时间
[UIView setAnimationDuration:5];

//动画可以修改任何UIView子类的坐标,大小,形变,色彩和透明度
view.frame = self.window.bounds;
view.backgroundColor = [UIColor greenColor];

[UIView commitAnimations];
//完成动画结果的设置,开始执行动画


*/

/*-------------Block版本的动画效果------------------*/

void (^animations)(void) = ^(void){
view.frame = self.window.bounds;
view.backgroundColor = [UIColor blueColor];
};

void (^completion)(BOOL) = ^(BOOL finished){
NSLog(@"动画结束!");
};

[UIView animateWithDuration:5 delay:15 options: UIViewAnimationOptionLayoutSubviews animations:animations completion:completion];


6.停靠模式

【注】停靠模式,是控制父视图改变大小时,子视图的变化方式。

【注】停靠模式并非服务于视图缩放,使用transform属性scale视图,根本是等比缩放。停靠模式是服务于父视图边界修改后,子视图的布局。

//自动改变子试图的大小 默认是NO 设置成YES子试图会跟着父试图改变大小

view.autoresizesSubviews = YES;

//子试图的停靠模式
subView.autoresizingMask = UIViewAutoresizingFlexibleHeight |UIViewAutoresizingFlexibleWidth;
// ‘|’ 位运算符
//    UIViewAutoresizingNone                 = 0,
//    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
//  右边界和父视图的距离不变 左边界自由
//    UIViewAutoresizingFlexibleWidth        = 1 << 1,
//  自由的宽度
//    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
//  左边界和父视图的距离不变 右边界自由
//    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
//  下边界和父视图的距离不变 上边界自由
//    UIViewAutoresizingFlexibleHeight       = 1 << 4,
//  自由的高度
//    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
//  上边界和父视图的距离不变 下边界自由
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: