UIControl及其子类分段视图,滑块,开关,stepper
视图控制器的子视图控制器
//先创建子视图控制器
//将子视图控制器的头文件引到根视图控制器中,创建属性
//在ViewDidLoad外面写方法
-(void)initChildViewController{
//创建子视图控制器的对象
}
//最后在viewDidLoad中将此方法实现
[self initChildViewController];
#pragma mark --- 添加子controller的方法 ---
- (void)initChildViewController
{
// 第一种情况 有frame 带滑动效果
/*
self.oneViewVc = [[OneViewController alloc]init];
self.oneViewVc.view.backgroundColor = [UIColor redColor];
self.oneViewVc.view.frame = CGRectMake(0, 0, 375, 667);
// 添加子控制器 self 相当于就是RootViewController
[self addChildViewController:_oneViewVc];
// 将子控制器的view 添加到 self.view上
[self.view addSubview:_oneViewVc.view];
[_oneViewVc release];
// 第二个子视图控制器
self.twoViewVc = [[TwoViewController alloc]init];
self.twoViewVc.view.backgroundColor = [UIColor yellowColor];
self.twoViewVc.view.frame = CGRectMake(375 * 1, 0, 375, 667);
[self addChildViewController:_twoViewVc];
[self.view addSubview:_twoViewVc.view];
[_twoViewVc release];
// 第三个子视图控制器
self.threeViewVc = [[ThreeViewController alloc]init];
self.threeViewVc.view.backgroundColor = [UIColor greenColor];
self.threeViewVc.view.frame = CGRectMake(375 * 2, 0, 375, 667);
[self addChildViewController:_threeViewVc];
[self.view addSubview:_threeViewVc.view];
[_threeViewVc release];
*/
// 第二种情况 没有frame 不带滑动效果 通过hidden 实现界面切换
/*
self.oneViewVc = [[OneViewController alloc]init];
self.oneViewVc.view.backgroundColor = [UIColor redColor];
// 添加子控制器 self 相当于就是RootViewController
[self addChildViewController:_oneViewVc];
//
//self.oneViewVc.view.hidden = YES;
// 将子控制器的view 添加到 self.view上
[self.view addSubview:_oneViewVc.view];
[_oneViewVc release];
// 第二个子视图控制器
self.twoViewVc = [[TwoViewController alloc]init];
self.twoViewVc.view.backgroundColor = [UIColor yellowColor];
//self.twoViewVc.view.hidden = YES;
[self addChildViewController:_twoViewVc];
[self.view addSubview:_twoViewVc.view];
[_twoViewVc release];
// 第三个子视图控制器
self.threeViewVc = [[ThreeViewController alloc]init];
self.threeViewVc.view.backgroundColor = [UIColor greenColor];
//self.threeViewVc.view.hidden = YES;
[self addChildViewController:_threeViewVc];
[self.view addSubview:_threeViewVc.view];
[_threeViewVc release];
*/
}
一 UISegmentedControl-----分段控制
//装载分栏视图的所有标题
NSArray *titleArray = @[@“1”,@“2”,@‘3”];
//创建对象
UISegmentedControl *segment = [[UISegmentControl alloc]initWithItems:titleArray];
segment.frame = CGRectMake();
//设置填充颜色,字体颜色,边框颜色,
segment.tintColor = [UIColor redColor];
//分栏是从左到右 从0开始,一上来显示的是哪一个分栏就是被选中状态
segment.selectedSegmentIndex = 0;
//设置选中效果,默认是NO, YES是选中之后立刻消失
segment.momentary = YES;
//添加事件 UISegment 分栏视图 UISlide 滑条 UISwitch开关 我们的点击方式都是用UIControlEventValueChanged
[segment addTarget:self action:@selector(segmentAction:)for Control Events:UIControlEventValueChanged];
//添加到RootViewController上面的View上面
[self.view addSubview:segment];
二 UISlider ----滑块,交互打开可以滑动 交互关闭不可以滑动默认交换是打开的
UISlider *slider = []
//一般不给背景颜色
slider.backgroundColor =
//设置小于当前值的 滑条颜色(划过区域的颜色)
slider.minimumTrackTintColor = [];
//设置大于当前值的 滑条颜色(空白区域的颜色)
slider.maximumTrackTintColor = [];
//设置滑块的颜色(小圆圈)
slider.thumbTintColor = [];
//设置最小值默认是0
slider.minimumValue = 0;
//设置最大值
slider .maximumValue = 1;
//设置当前值
slider.value = 0,5;
//设置决定触发方法是不是跟着滑条的移动而实时触发
//默认是YES 实时触发事件
//如果是NO 是等待用户 滑动完成之后 并且松手 才会触发事件
slider.continuous = NO;
//让slider竖着 相当于旋转了90度, 改变的是transform
slider.transform = CGAffineTransformMakeRotation(M_PI_2*3);
//添加事件 厨房方法
slider addTarget:self action:@selector(sliderAction:)forControlEvents:UIControlEventValueChanged];
三 UISwitch 开关
//不管switch的frame给到多大 只有X和Y 起作用,宽和高不会发生变化
//switch和系统关键字重名,命名是要另起名字
UISwitch *mySwitch = [];
//一般是使用默认颜色
//圆球颜色
mySwitch.thumbTintColor =
mySwitch.onTintColor =
//边框颜色
mySwitch.tintColor =
//设置成打开状态 默认是关闭状态
mySwitch.on = YES;
//添加触发事件
四 UIStepper 左减号 右加号
UIStepper *stepper =
//控制放大 或者缩小的倍数 继承于UI Controller
//缩放倍数
stepper。stepValue = 0。5;
//stepper的初始值
stepper。value = 1;
//添加方法,ValueChange 类型
#pragma mark --- stepper放大缩小事件 ---
- (void)stepperAction:(UIStepper *)stepper
{
UISegmentedControl *seg = self.view.subviews[0];
seg.transform = CGAffineTransformMakeScale(stepper.value, stepper.value);
/*
// 记录老的中心
CGPoint olderCenter = seg.center;
seg.frame = CGRectMake(seg.frame.origin.x, seg.frame.origin.y, 200 + 200 * stepper.value, 30 + 30 * stepper.value);
// 把最后一次变动的中心点重新赋值给center 方便下次在原先的基础上改变
seg.center = olderCenter;
*/
}
#pragma mark --- 开关触发事件 ---
- (void)mySwitchAction:(UISwitch *)mySwitch
{
// 开关控制滑条是否能够滑动
UISlider *slider = self.view.subviews[1];
if (mySwitch.on == YES)
{
slider.userInteractionEnabled = YES;//打开交互
}
else
{
slider.userInteractionEnabled = NO;//关闭交互
}
}
#pragma mark --- 滑条触发事件 ---
- (void)sliderAction:(UISlider *)slider
{
NSLog(@"滑动了");
// 让滑动的值称为alpha的取值范围
// if(slider.value <= 0.5)
// {
// self.view.alpha = 0.1;
// return;
// }
self.view.alpha = slider.value;
}
#pragma mark --- 分栏视图点击事件 ---
- (void)segmentAction:(UISegmentedControl *)segment
{
// 第一种情况 有frame 带滑动效果
/*
if (segment.selectedSegmentIndex == 0)
{
NSLog(@"点击了第一个");
}
else if(segment.selectedSegmentIndex == 1)
{
NSLog(@"点击了第二个");
}
else if(segment.selectedSegmentIndex == 2)
{
NSLog(@"点击了第三个");
}
*/
/*
if (segment.selectedSegmentIndex == 0)
{
[UIView animateWithDuration:0.1 animations:^{
self.oneViewVc.view.frame = CGRectMake(375 * 0, 0, 375, 667);
self.twoViewVc.view.frame = CGRectMake(375 * 1, 0, 375, 667);
self.threeViewVc.view.frame = CGRectMake(375 * 2, 0, 375, 667);
} completion:nil];
}
else if(segment.selectedSegmentIndex == 1)
{
[UIView animateWithDuration:0.1 animations:^{
self.oneViewVc.view.frame = CGRectMake(- 375 * 1, 0, 375, 667);
self.twoViewVc.view.frame = CGRectMake(375 * 0, 0, 375, 667);
self.threeViewVc.view.frame = CGRectMake(375 * 1, 0, 375, 667);
} completion:nil];
}
else if(segment.selectedSegmentIndex == 2)
{
[UIView animateWithDuration:0.1 animations:^{
self.oneViewVc.view.frame = CGRectMake(- 375 * 2, 0, 375, 667);
self.twoViewVc.view.frame = CGRectMake(- 375 * 1, 0, 375, 667);
self.threeViewVc.view.frame = CGRectMake(375 * 0, 0, 375, 667);
} completion:nil];
}
*/
/*
// 等价于上面的代码
[UIView animateWithDuration:0.1 animations:^{
self.oneViewVc.view.frame = CGRectMake(- 375 * (segment.selectedSegmentIndex - 0), 0, 375, 667);
self.twoViewVc.view.frame = CGRectMake(- 375 * (segment.selectedSegmentIndex - 1), 0, 375, 667);
self.threeViewVc.view.frame = CGRectMake(- 375 * (segment.selectedSegmentIndex - 2), 0, 375, 667);
} completion:nil];
*/
// 第二种情况 通过hidden 控制界面的显示还是隐藏
// 不管点的是谁 让所有控制器的View全部以藏掉
/*
for (UIViewController *vc in self.childViewControllers)
{
vc.view.hidden = YES;
}
// 再寻找 点击对应的控制器 让其显示出来
UIViewController *tempVc = self.childViewControllers[segment.selectedSegmentIndex];
tempVc.view.hidden = NO;
*/
// 遍历所有子控制器 如果是要找的那个 就让它显示 别的都隐藏
UIViewController *tempVc = self.childViewControllers[segment.selectedSegmentIndex];
NSLog(@"%@",[tempVc class]);
for (UIViewController *vc in self.childViewControllers)
{
// 判断我当前的所遍历到得这个controller 是不是属于(OneViewController)要找的这个类
if ([vc isKindOfClass:[tempVc class]])
{
vc.view.hidden = NO;
}
else
{
vc.view.hidden = YES;
}
}
}