UIView的几个主要属性
1 /* 2 CGRect frame; 3 4 CGRect bounds; 5 6 CGPoint center; 7 8 CGAffineTransform transform; 9 */
frame 坐标与长宽
center 中心点
bounds 坐标系限制(?)
UIView的形变
//view的变形 () //直接形变 view.transform = CGAffineTransformMakeScale(1, 1); //旋转形变 传入一个弧度 view.transform = CGAffineTransformMakeRotation(M_PI); /* #define M_E 2.71828182845904523536028747135266250 e #define M_LOG2E 1.44269504088896340735992468100189214 log2(e) #define M_LOG10E 0.434294481903251827651128918916605082 log10(e) #define M_LN2 0.693147180559945309417232121458176568 loge(2) #define M_LN10 2.30258509299404568401799145468436421 loge(10) #define M_PI 3.14159265358979323846264338327950288 pi #define M_PI_2 1.57079632679489661923132169163975144 pi/2 #define M_PI_4 0.785398163397448309615660845819875721 pi/4 #define M_1_PI 0.318309886183790671537767526745028724 1/pi #define M_2_PI 0.636619772367581343075535053490057448 2/pi #define M_2_SQRTPI 1.12837916709551257389615890312154517 2/sqrt(pi) #define M_SQRT2 1.41421356237309504880168872420969808 sqrt(2) #define M_SQRT1_2 0.707106781186547524400844362104849039 1/sqrt(2) */
//改变父视图的透明度 //子视图的透明度也会跟着改变 view.alpha = 0.3;
// 设置子视图超出范围时切割 view.clipsToBounds = NO;
//父视图关闭视图交互 //关闭交互后 子视图交互也全部关闭 view.userInteractionEnabled = NO;
//subView是view的子视图 [view addSubview:subView];
//点击超出父视图范围的地方 不会调用 [button addTarget:self action:@selector(printString) forControlEvents:UIControlEventTouchUpInside];
若两个Button有重叠部分 则点击重叠部分 点击方法调用的是最上层的 也就是后添加的。
//arr获取父视图的子视图数组 最底层为0 NSArray * arr = view.subviews; //改变子视图图层关系 都是父视图的方法 //把视图移动到所有子视图最上面 * [view bringSubviewToFront:arr[0]]; //把子视图移动到所有子视图最下面 * [view sendSubviewToBack:arr[2]]; //把子视图插入到某个视图上面 第一个参数为要移动的视图 [view insertSubview:arr[2] aboveSubview:arr[1]]; //把一个子视图 插入到某一个视图的下面 [view insertSubview:arr[2] belowSubview:arr[1]]; //把一个视图 插入到某层位置 从底部开始 如果要移动的子视图没有添加到父视图上 会先添加到父视图上 [view insertSubview:arr[0] atIndex:1];
UIView动画
//动画从这里开始 [UIView beginAnimations:nil context:nil]; //设置动画执行时间 [UIView setAnimationDuration:1]; //设置动画延迟执行时间 [UIView setAnimationDelay:1]; //设置动画代理 [UIView setAnimationDelegate:self]; //动画结束后执行的方法 [UIView setAnimationDidStopSelector:@selector(changeView)]; //动画执行的内容 view.frame = self.view.bounds; view.backgroundColor = [UIColor greenColor]; //开始执行动画 [UIView commitAnimations];
快速设置
//block动画 // 时间 延迟 选择动画 动画执行内容 执行结束后的block方法 [UIView animateWithDuration:0.5 delay:0 options: UIViewAnimationOptionBeginFromCurrentState animations:^{ view.frame = CGRectMake(arc4random()%415, arc4random()%737, arc4random()%200,arc4random()%200); view.center = CGPointMake(arc4random()%415, arc4random()%737); view.backgroundColor = [UIColor colorWithRed:10000/(arc4random()%40000) green:10000/(arc4random()%40000) blue:10000/(arc4random()%10000) alpha:0.8]; } completion:^(BOOL finished) { [self changeView]; }];
停靠模式 父视图改变时 子视图的改变
//设置子视图的停靠模式 subView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; /* typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, 没有效果 UIViewAutoresizingFlexibleLeftMargin = 1 << 0, 自由左编辑 子视图和父视图右边间距不变 UIViewAutoresizingFlexibleWidth = 1 << 1, 横向两边间距不变 UIViewAutoresizingFlexibleRightMargin = 1 << 2, 自由右编辑 UIViewAutoresizingFlexibleTopMargin = 1 << 3, 自由顶编辑 底部间距不变 UIViewAutoresizingFlexibleHeight = 1 << 4, 竖向两侧间距不变 UIViewAutoresizingFlexibleBottomMargin = 1 << 5 顶部间距不变 }; */
关于滑块控件 UISlider
//创建一个滑块控件 UISlider * slider = [[UISlider alloc]initWithFrame:CGRectMake(60, 400, 200, 50)]; //左侧值 slider.minimumValue = 0; //右侧值 slider.maximumValue = 200; //设置初始值 slider.value = 200; //添加滑动方法 UIControlEventValueChanged值改变时执行changeValue:方法 [slider addTarget:self action:@selector(changeValue:) forControlEvents:UIControlEventValueChanged];