做天猫还是做网站推广,详情页面设计,数字营销的定义是,镇江平台公司UI学习 一#xff1a;UIView基础frame属性隐藏视图对象#xff1a;UIView的层级关系 二#xff1a;UIWindow对象三#xff1a;UIViewController基础UIViewController使用 四#xff1a;定时器与视图移动五#xff1a;UISwitch控件六#xff1a;滑动条和进度条七#xf… UI学习 一UIView基础frame属性隐藏视图对象UIView的层级关系 二UIWindow对象三UIViewController基础UIViewController使用 四定时器与视图移动五UISwitch控件六滑动条和进度条七步进器和分栏控件八警告对话框和等待提示器九UITextField滚动视图滚动视图基础滚动视图高级 总结 一UIView基础
我们先来介绍一下frame属性
frame属性
frame框架可以理解为视图在父视图中的位置和大小的描述。具体来说frame框架包括视图的原点坐标和宽高两个属性。
原点坐标origin原点坐标表示视图在父视图坐标系统中的位置通常是相对于父视图左上角的距离。原点坐标是一个CGPoint对象包括x和y两个属性。宽高size宽高表示视图在父视图中的大小通常是视图的宽度和高度。宽高是一个CGSize对象包括width和height两个属性
而CGRectMake是一个用来创建CGRect结构体的函数该函数传入四个参数分别为原点坐标的x和y宽高的width和height。
简而言之我们对frame属性初始化传入前两个参数确定开始位置传入后两个参数作为视图的大小。这也是其他控件的基本属性。 UIview是iOS的视图对象是显示在屏幕上的所有对象的基础类 也就是说所有显示在屏幕上的对象一定都继承与UIView屏幕上所有能看到的对象都是UIView的子类
UIView是一个矩形对象有背景颜色可以显示有层级关系frame属性是UIView的基本属性而UiView是其他对象的父类因此所有对象都有该属性。
下面使用代码来展示UIView的基础内容
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//初始化一个UIview对象UIView *view [[UIView alloc] init];//设置UIview的位置view.frame CGRectMake(100, 100, 100, 200);view.backgroundColor [UIColor orangeColor];//将新建的视图添加到父亲视图上//1:将新建的视图显示到屏幕上//2将视图作为父亲视图的子视图管理起来[self.view addSubview:view];//将自己从父亲视图删除掉//1.从父亲视图的管理中删除//2.不会显示在屏幕。//[view removeFromSuperview] ;
}效果
隐藏视图对象
分别有三种方法
设置hidde属性是否隐藏设置alpha属性设置透明度设置opaque属性是否显示不透明 //是否隐藏视图对象//YES不显示//NO显示默认值为NOview.hidden YES;//设置视图的透明度//alpha 1不透明//a 0 透明//a 0.5: 半透明view.alpha 1;//设置是否显示不透明view.opaque YES; UIView的层级关系
UIview是在父视图中可以用self.view.subviews[]的数组下标来查看而这个数组是有顺序的即层级关系。
先加入的视图在数组的开始即在屏幕的最底层。重复加入不会开辟新的数组位置而是移动数组的排序方式。可以使用bringSubviewToFront、sendSubviewToBack等方法来改变视图的顺序。removeFromSuperview方法可以删除子视图。
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.UIView *view1 [[UIView alloc] init];view1.frame CGRectMake(100, 100, 150, 150);view1.backgroundColor [UIColor orangeColor];UIView *view2 [[UIView alloc] init];view2.frame CGRectMake(125, 125, 150, 150);view2.backgroundColor [UIColor blueColor];UIView *view3 [[UIView alloc] init];view3.frame CGRectMake(150, 150, 150, 150);view3.backgroundColor [UIColor blackColor];//将三个视图对象显示到屏幕上并且添加到父亲视图上。//重复加入已有元素不会扩大数组而是移动数组[self.view addSubview:view1];[self.view addSubview:view2];[self.view addSubview:view3];[self.view addSubview:view1];//[self.view addSubview:view2];//将某一个视图调整到最前面显示//参数UIView对象调整到一个视图到最前方//实际上也移动了数组的位置。// [self.view bringSubviewToFront:view1];//将某一个视图调整到最后显示//参数UIView对象调整哪一个视图到最后//实际上也移动了数组的位置// [self.view sendSubviewToBack:view3];UIView *viewFront self.view.subviews[0];// [view1 removeFromSuperview];UIView *viewBack self.view.subviews[2];if (viewFront view2) {NSLog(等于);}if (viewBack view1) {NSLog(等于);}
}效果 同时我们可以验证重复添加视图是移动数组位置而不是创建新的数组。 二UIWindow对象
注意在XCode13之后我们使用代码来创建初始化一个UIWindow对象不在AppDelegate类中进行而是在SceneDelegate类进行并且不需要创建UIWindow对象只需要为其初始化视图管理器后即可进行使用。
UIWindow对象是UIView最顶层的容器包含应用并显示所有的UIView对象。同时也可以反映传递事件给UIView。 下面是UIWindow的一些基本使用。
SceneDelegate.m文件 #import SceneDelegate.hinterface SceneDelegate ()endimplementation SceneDelegate- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {//对UIWindow对象创建视图控制器self.window.rootViewController [[UIViewController alloc] init] ;//设置背景颜色self.window.backgroundColor [UIColor blackColor];//直接给window上添加视图UIView *view1 [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 200)];view1.backgroundColor [UIColor blueColor];UIView *view2 [[UIView alloc] initWithFrame:CGRectMake(150, 0, 50, 200)];view2.backgroundColor [UIColor redColor];//当创建一个新的背景视图然后将这个视图作为window的子视图再让view1作为背景视图的子视图就会有一个层级关系//当移动背景视图的时候view1视图也会随着移动子视图是参照父视图的坐标系UIView *backview [[UIView alloc] initWithFrame:CGRectMake(100, 400, 200, 200)];backview.backgroundColor [UIColor whiteColor];//将子视图添加到爸爸视图上[backview addSubview:view1];[backview addSubview:view2];[self.window addSubview:backview];NSLog(%, view1.window);NSLog(%, backview.window);NSLog(%, self.window);//使window有效并显示到屏幕上[self.window makeKeyAndVisible];}效果 同时通过对三个window对象的打印我们可以印证整个程序仅有一个UIWindow对象。 三UIViewController基础
UIViewController是视图控制器的意思。整个UIKit框架中只能有一个根视图控制器属于window属性但是可以有多个视图控制器视图控制器用来管理界面和处理界面的逻辑类对象程序启动前必须对根视图控制器赋值。 我们在SceneDelegate.m文件中实现对根视图控制器的初始化。
#import SceneDelegate.h
#import ViewController.h
interface SceneDelegate ()endimplementation SceneDelegate- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {ViewController *vcRoot [[ViewController alloc] init];self.window.rootViewController vcRoot;self.window.backgroundColor [UIColor redColor];}UIViewController使用
通过对UIViewController的学习我们可以实现视图控制界面的切换。下面我们实操来加深学习。
首先我们需要创建视图控制器并为其初始化不同的颜色。 之后我们可以调用presentViewController方法实现显示一个新的视图控制器界面到屏幕上。再在新的view文件中使用dismissViewControllerAnimated方法(关闭当前视图控制器界面)回到原来的视图控制器界面。
具体实现代码
ViewController.m文件
#import ViewController.h
#import ViewC02.h
interface ViewController ()endimplementation ViewController-(void) touchesBegan:(NSSetUITouch * *)touches withEvent:(UIEvent *)event
{//创建视图控制器二ViewC02* vc [[ViewC02 alloc] init];//整个屏幕vc.modalPresentationStyle UIModalPresentationFullScreen;//显示一个新的视图控制器到屏幕上//P1:新的视图控制器对象//P2使用动画切换动画效果//P3:切换结束后功能调用不需要则穿nil[self presentViewController:vc animated:YES completion:nil];
}
//第一次程序加载视图时调用
//只调用一次
- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.view.backgroundColor [UIColor blueColor];NSLog(viewDidLoad 第一次加载!);
}//当视图控制器的视图即将显示时调用次函数
//视图分为1.显示前 2.正在处于显示状态 3.已经被隐藏
//参数是否用动画切换后显示
- (void) viewWillAppear:(BOOL)animated
{NSLog(viewWillAppear,视图即将显示);
}
//视图即将消失调用次函数
//参数表示是否用动画切换后消失
//当前的状态视图还显示在屏幕上
-(void) viewWillDisAppear:(BOOL)animated
{NSLog(视图即将消失);
}//当视图已经显示到屏幕后到瞬间调用次函数
//参数表示是否用动画切换显示的
//当前状态:已经显示到屏幕上
-(void) viewDidAppear:(BOOL)animated
{NSLog(视图已经显示);
}//当前视图已经从屏幕上消失
//参数表示是否用动画切换显示的
//当前状态:当前视图控制器视图已经消失
-(void) viewDidDisappear:(BOOL)animated
{NSLog(视图已经消失);
}
end
ViewC02.m文件
#import ViewC02.hinterface ViewC02 ()endimplementation ViewC02- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.self.view.backgroundColor [UIColor orangeColor];
}-(void) touchesBegan:(NSSetUITouch * *)touches withEvent:(UIEvent *)event
{ //点击屏幕后使当前视图控制器界面消失。[self dismissViewControllerAnimated:YES completion:nil];
}
效果点击前 点击后
上图代码中我们还加入了一些操作函数来显示屏幕的调用。 注意添加下述代码后才会使整个屏幕切换从而显示viewDidDisappear操作函数。
vc.modalPresentationStyle UIModalPresentationFullScreen;代码运行结果 四定时器与视图移动
创建一个定时器先要在接口文件中创建NSTimer属性。
property (retain, nonatomic) NSTimer *timerVier;之后采用scheduledTimerWithTimeInterval:的类方法来创建定时器。并启动该定时器。 该方法有五个参数
P1:每隔多长时间调用定时器函数以秒为单位
P2表示实现定时器函数的对象指针
P3:定时器函数对象
P4可以传入定时器函数中一个参数无参数可以传nil
P5:定时器是否重复操作YES为重复NO只完成一次函数调用而我们要实现使指定view对象移动需要先为view对象设置一个标签值在定时器的事件函数中进行使用。 下列代码中的view.frame CGRectMake(view.frame.origin.x1, view.frame.origin.y1, 80, 80);即实现这一功能使view视图的xy轴随时间移动。
ViewController.m文件
#import ViewController.hinterface ViewController ()endimplementation ViewControllersynthesize timerVier _timerVier;- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.UIButton *btn [UIButton buttonWithType:UIButtonTypeRoundedRect];btn.frame CGRectMake(100, 100, 80, 40);[btn setTitle:启动定时器 forState:UIControlStateNormal];[btn addTarget:self action:selector((pressStart)) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:btn];UIButton *btnStop [UIButton buttonWithType:UIButtonTypeRoundedRect];btnStop.frame CGRectMake(100, 200, 80, 40);[btnStop setTitle:停止定时器 forState:UIControlStateNormal];[btnStop addTarget:self action:selector(pressStop) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:btnStop];UIView *view [[UIView alloc] init];view.frame CGRectMake(0, 0, 80, 80);view.backgroundColor [UIColor blueColor];[self.view addSubview:view];//设置view对标签值//通过爸爸视图对象以及view的标签值可以获得相应的对象view.tag 101 ;
}//按下开始按钮函数
- (void) pressStart
{//NSTimer的类方法创建一个定时器并启动这个定时器//P1:每隔多长时间调用定时器函数以秒为单位//P2表示实现定时器函数的对象指针//P3:定时器函数对象//P4可以传入定时器函数中一个参数无参数可以传nil//P5:定时器是否重复操作YES为重复NO只完成一次函数调用//返回值为一个新建好的定时器对象_timerVier [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:selector(updateTimer:) userInfo:lyf repeats:YES];
}//定时器函数
//可以将定时器本身作为参数传入
-(void) updateTimer:(NSTimer*) timer
{ //userInfo为id类型NSLog(test!! name %, timer.userInfo);//tag最好从100开始UIView *view [self.view viewWithTag:101];view.frame CGRectMake(view.frame.origin.x1, view.frame.origin.y1, 80, 80);
}
//按下停止按钮时调用
-(void) pressStop
{if (_timerVier ! nil) {//停止定时器[_timerVier invalidate];}
}
end效果 还有一点需要注意如果对上述代码连续点击两次启动定时器此时再按停止定时器将无法停止视图移动。 原因每次点击都创造出一个定时器对象从而使第一次点击的定时器对象无法覆盖。即无法再停止第一个定时器对象只能停止新建立的定时器对象。 解决办法将该属性变成单例模式或者每次进入pressStart时调用一遍结束方法。即
- (void) pressStart
{[self pressStop];//每次调用前先关闭前一个定时器。_timerVier [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:selector(updateTimer:) userInfo:lyf repeats:YES];
}五UISwitch控件
UISwitch控件是苹果官方库提供的一个控件与定时器相同需要先在接口部分声明一个属性在实现部分实现其具体功能。 但是作为苹果官方的控件苹果对其作出了一定的限制如无法改变宽度高度值和设计样式。 下例代码详细展示了该控件的使用
#import ViewController.hinterface ViewController ()endimplementation ViewControllersynthesize mySwitch _mySwitch;- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//创建一个开关对象_mySwitch [[UISwitch alloc] init];//苹果官方的控件的位置设置//位置XY的值可以改变//宽度高度值是无法改变。系统默认设置了_mySwitch.frame CGRectMake(100, 100, 0, 0);//开关状态设置属性//YES开启状态//NO关闭状态//_mySwitch.on YES;//[_mySwitch setOn:YES];//设置开关状态//P1:状态设置//P2:是否开启动画效果[_mySwitch setOn:YES animated:YES];[self.view addSubview:_mySwitch];//设置开启状态的风格颜色[_mySwitch setOnTintColor:[UIColor orangeColor]];//设置开关圆按钮的风格颜色[_mySwitch setThumbTintColor:[UIColor blueColor]];//设置整体风格颜色 没作用原因已截图[_mySwitch setTintColor:[UIColor redColor]];//向开关控件添加事件函数//P1:函数实现对象//P2函数对象//P3事件响应时的事件类型UIControlEventValueChanged状态发生变化[_mySwitch addTarget:self action:selector(swChange:) forControlEvents:UIControlEventValueChanged];
}
- (void) swChange:(UISwitch*) sw
{if (sw.on YES) {NSLog(哈哈,打开咯);}else {NSLog(哈哈关闭咯);}NSLog(我变质了);
}end代码结果 六滑动条和进度条
滑动条与进度条也需要在接口部分定义属性在实现部分实现功能。 除了对这两个的基本使用我们还可以实现用滑动条来控制进度条的长短当滑动条与进度条不是相同长度时我们可以使用下面的代码来实现等比例控制。
pView.progress (_slider.value - _slider.minimumValue) / (_slider.maximumValue - _slider.minimumValue);ViewController.h
#import UIKit/UIKit.hinterface ViewController : UIViewController
{//进度条对象//一般用来表示下载或者视频播放的进度UIProgressView * pView;//滑动条定义//一般用来进行调整音频音乐的音量等UISlider *_slider;
}
//定义一个进度条属性
property (retain, nonatomic) UIProgressView *pView;
//定义一个滑动条属性
property (retain, nonatomic) UISlider *slider;
end
ViewController.m
#import ViewController.hinterface ViewController ()endimplementation ViewControllersynthesize slider _slider;
synthesize pView _pView;- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//进度条的创建pView [[UIProgressView alloc] init];//进度条的位置大小设置//进度条的高度是不可以变化的.P4不可变pView.frame CGRectMake(50, 100, 300, 40);pView.progressTintColor [UIColor greenColor];pView.trackTintColor [UIColor blackColor];//设置进度条的进度值//范围从0-1//最小值为0最大值为1pView.progress 0;//设置进度条的风格特征pView.progressViewStyle UIProgressViewStyleBar;[self.view addSubview: pView];//创建滑动条对象_slider [[UISlider alloc] init];//位置设置高度不可变更_slider.frame CGRectMake(10, 200, 300, 40);//设置滑动条的最大值_slider.maximumValue 100;//设置滑动条的最小值可以为负_slider.minimumValue -100;//设置滑动条的滑块位置_slider.value 0;//左侧滑条背景颜色// _slider.minimumTrackTintColor [UIColor blueColor];//右侧滑动条背景颜色_slider.maximumTrackTintColor [UIColor greenColor];//设置滑块颜色_slider.thumbTintColor [UIColor orangeColor];[_slider addTarget:self action:selector(pressSlider) forControlEvents:UIControlEventValueChanged];[self.view addSubview:_slider];
}-(void) pressSlider
{pView.progress (_slider.value - _slider.minimumValue) / (_slider.maximumValue - _slider.minimumValue);NSLog(value %f, _slider.value);
}end
效果
七步进器和分栏控件
先要在接口文件中定义步进器对象和分栏控制器对象。
ViewController.h
#import UIKit/UIKit.hinterface ViewController : UIViewController
{//定义步进器对象//按照一定的数字来调整某个数据UIStepper *_stepper;//分栏控制器定义UISegmentedControl *_segControl;
}property (retain, nonatomic) UIStepper *stepper;
property (retain, nonatomic) UISegmentedControl *segControl;end
在.m文件中我们不仅可以以文本来初始化分拦控件还可以以照片来初始化分拦控件。 ViewController.m
#import ViewController.hinterface ViewController ()endimplementation ViewControllersynthesize stepper _stepper;
synthesize segControl _segControl;- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view._stepper [[UIStepper alloc] init];//只能设置位置宽高不能改变_stepper.frame CGRectMake(100, 100, 80, 40);//设置步进器的最小值_stepper.minimumValue 0;//设置步进器的最大值_stepper.maximumValue 100;//设置步进器的当前值默认值为0_stepper.value 10;//设置步进器每次向前或者向后步进的步伐值_stepper.stepValue 5;//是否可以重复响应事件操作_stepper.autorepeat YES;//是否将步进结果通过事件函数响应出来//不显示中间过程长按直接显示结果。_stepper.continuous NO;//添加事件函数[_stepper addTarget:self action:selector(stepChange) forControlEvents:UIControlEventValueChanged];[self.view addSubview:_stepper];_segControl [[UISegmentedControl alloc] init];//宽度可变高度不可变_segControl.frame CGRectMake(10, 200, 300, 40);//添加一个按钮元素[_segControl insertSegmentWithTitle:0元 atIndex:0 animated:NO];//参数一按钮选项文字//参数二按钮索引位置//参数三是否有插入的动画效果[_segControl insertSegmentWithTitle:5元 atIndex:1 animated:NO];[_segControl insertSegmentWithTitle:10元 atIndex:2 animated:NO];// [_segControl insertSegmentWithTitle:30元 atIndex:0 animated:NO];//以照片作为分拦控件的图像。//注意要将照片放入当前视图内。UIImage *image [UIImage imageNamed:WechatIMG26890.jpg];image [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];[_segControl setImage:image forSegmentAtIndex:2];//当前默认按钮索引设置_segControl.selectedSegmentIndex 0;[_segControl addTarget:self action:selector(segChange) forControlEvents:UIControlEventValueChanged];[self.view addSubview:_segControl];
}-(void) segChange
{NSLog(%d, _segControl.selectedSegmentIndex);
}-(void) stepChange
{NSLog(step press! value %f, _stepper.value);
}end
效果 代码结果 八警告对话框和等待提示器
在遇到电量不足等特殊情况时可以弹出警告对话框提示用户。 在下载或加载比较大的文件时可以显示等待提示器提示用户。 我们在ViewController 的接口文件中定义这两个对象。
interface ViewController : UIViewController
{//定义一个警告对话框视图对象UIAlertController *_alertView;//等待提示对象//当下载或加载比较大的文件时可以显示此控件处于提示等待状态UIActivityIndicatorView *_activityIndicator;
}property (retain, nonatomic) UIAlertController *alertVier;
property (retain, nonatomic) UIActivityIndicatorView *act;end在实现部分我们先建立两个按钮用来弹出提示器。 随后开始实现这两个提示器。
警告对话框
[UIAlertController alertControllerWithTitle:警告 message:你的手机已经被劫持 preferredStyle:UIAlertControllerStyleAlert];使用如上代码设置样式为弹出警告式的对话框。参一为标题参二为警告内容。 UIAlertAction* action01 [UIAlertAction actionWithTitle:打钱 style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){/* 在这里编写执行该选项的代码*/}];随后创建三个不同的action对象如上所示参一为提示参二为样式参三为需要执行的代码块 样式为以下四种
UIAlertActionStyleDefault默认样式用于表示用户可以选择的主要操作。UIAlertActionStyleCancel取消样式通常用于取消操作只能有一个取消按钮。UIAlertActionStyleDestructive破坏性样式用于表示执行此操作可能有破坏性后果。UIAlertActionStyleTextInput输入样式允许用户在弹出的警告框中输入文本。
最后将操作对象加入到警告框中再使该警告框显示。
等待提示器 等待提示器的高度和宽度由苹果官方设定不可改变。可以设置四种不同风格的等待指示器。
UIActivityIndicatorViewStyleWhiteLarge表示一个白色的大号等待提示器。UIActivityIndicatorViewStyleWhite表示一个白色的普通大小等待提示器。UIActivityIndicatorViewStyleGray表示一个灰色的普通大小等待提示器。UIActivityIndicatorViewStyleMedium表示一个中等大小的等待提示器通常是灰色的。
#import ViewController.hinterface ViewController ()endimplementation ViewControllersynthesize alertVier _alertVier;
synthesize act _act;- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.for (int i 0; i 2; i){UIButton *btn [UIButton buttonWithType:UIButtonTypeRoundedRect];btn.frame CGRectMake(100, 100 100 * i, 100, 40);if (i 0){[btn setTitle:警告对话框 forState:UIControlStateNormal];} else if (i 1) {[btn setTitle:等待指示器 forState:UIControlStateNormal];}btn.tag 101 i;[btn addTarget:self action:selector(pressBtn:) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:btn];}}- (void)pressBtn:(UIButton*) btn {//警告对话框创建if (btn.tag 101) {_alertView [UIAlertController alertControllerWithTitle:警告 message:你的手机已经被劫持 preferredStyle:UIAlertControllerStyleAlert];UIAlertAction* action01 [UIAlertAction actionWithTitle:打钱 style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){/* 在这里编写执行该选项的代码*/}];UIAlertAction* action02 [UIAlertAction actionWithTitle:打钱 style:UIAlertActionStyleCancel handler:^(UIAlertAction *action){/* 在这里编写执行该选项的代码*/}];UIAlertAction* action03 [UIAlertAction actionWithTitle:投降 style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){/* 在这里编写执行该选项的代码*/}];[_alertView addAction:action01];[_alertView addAction:action02];[_alertView addAction:action03];[self presentViewController:_alertView animated:YES completion:nil];} else if (btn.tag 102){//宽度和高度不可改变_activityIndicator [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(100, 300, 80, 80)];//设定提示的风格_activityIndicator.activityIndicatorViewStyle UIActivityIndicatorViewStyleMedium;_activityIndicator.activityIndicatorViewStyle UIActivityIndicatorViewStyleLarge;[self.view addSubview:_activityIndicator];//启动动画并显示[_activityIndicator startAnimating];//停止动画并隐藏//[_activityIndicator stopAnimating];}
}end效果 点击警告对话框 点击等待指示器
九UITextField
先要在ViewController的接口部分中定义一个UITextField属性在接口部分实现。 作为一个文本控件该控件只能输入一行文本不能输入或显示多行常用来做登录界面。 我们可以设置文本的大小位置边框风格和键盘风格字体的大小和颜色。此处主要介绍边框风格和键盘风格 边框风格
UITextBorderStyleRoundedRect圆角风格UITextBorderStyleLine线框风格UITextBorderStyleBezel:bezel风格UITextBorderStyleNone:无边框风格
键盘风格常用
UIKeyboardTypeDefault默认风格UIKeyboardTypeNamePhonePad:字母和数字组合风格UIKeyboardTypeNumberPad:纯数字风格
#import ViewController.hinterface ViewController ()endimplementation ViewControllersynthesize textField _textField;- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//设定一个文本输入区对象self.textField [[UITextField alloc] init];//设定文字输入区的位置self.textField.frame CGRectMake(100, 100, 180, 40);//设置textField的内容文字self.textField.text 用户名;//设置文字的字体大小self.textField.font [UIFont systemFontOfSize:15];//设置字体的颜色self.textField.textColor [UIColor blueColor];//设置边框风格//UITextBorderStyleRoundedRect圆角风格//UITextBorderStyleLine线框风格//UITextBorderStyleBezel:bezel风格//UITextBorderStyleNone:无边框风格self.textField.borderStyle UITextBorderStyleLine;//设置虚拟键盘风格//UIKeyboardTypeDefault默认风格//UIKeyboardTypeNamePhonePad:字母和数字组合风格//UIKeyboardTypeNumberPad:纯数字风格self.textField.keyboardType UIKeyboardTypeNumberPad;//提示文字信息//当text属性为空self.textField.placeholder 请输入用户名....;//是否作为密码输入//YES作为密码加密NO正常显示self.textField.secureTextEntry NO;[self.view addSubview:self.textField];
}- (void) textFieldDidBeginEditing:(UITextField *)textField
{NSLog(开始编辑了);
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{self.textField.text ;NSLog(编辑输入结束了);
}//是否可以进行输入
//如果返回值为YES可以进行输入默认为YES
//NO不能输入文字,无权限的时候
-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
{return YES;
}//是否可以结束输入
//如果返回值为YES可以结束输入默认为YES
//NO不能结束文字输入密码位数不够
-(BOOL) textFieldShouldEndEditing:(UITextField *)textField
{if (self.textField.text.length 9) {return NO;} else {return YES;}
}//点击屏幕空白处调用此函数
- (void) touchesBegan:(NSSetUITouch * *)touches withEvent:(UIEvent *)event
{//使虚拟键盘回收不再做为第一消息响应者[self.textField resignFirstResponder];
}endUITextField控件的四个协议 开始编辑协议手机键盘弹出瞬间调用
- (void) textFieldDidBeginEditing:(UITextField *)textField结束编辑协议手机键盘收回瞬间调用
-(void) textFieldDidEndEditing:(UITextField *)textField是否可以进行输入 如果返回值为YES可以进行输入默认为YES NO不能输入文字 使用场景无权限的时候使用
-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField是否可以结束输入 如果返回值为YES可以结束输入默认为YES NO不能结束文字 使用场景输入密码位数不够
-(BOOL) textFieldShouldEndEditing:(UITextField *)textField滚动视图
手机屏幕较小通常情况下无法完全展示内容此时我们可以通过手势来滚动屏幕达到移动视图的效果而这个应用就是滚动视图。 像我们常用的QQ聊天页面微信聊天页面等就是滚动视图的实际应用。
滚动视图基础
我们可以设置上下滚动的视图也可以设置左右滚动的视图对应的画布大小需要跟着改变。 滚动视图的创建在视图控制器中进行即ViewController文件中进行。 图片的添加我们采用循环的方式简略。 #import ViewController.hinterface ViewController ()endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.UIScrollView *sv [[UIScrollView alloc] init];//设置滚动视图的位置使用矩形来定位视图位置sv.frame CGRectMake(0, 0, 394, 852);//是否按照整页来滚动视图sv.pagingEnabled YES;//是否可以开启滚动效果sv.scrollEnabled YES;//设置画布的大小画布显示在滚动视图内部一般大于Frame的大小sv.contentSize CGSizeMake(394*6, 852*2);//是否可以边缘弹动效果sv.bounces YES;//开启横向弹动效果sv.alwaysBounceHorizontal YES;//开启纵向弹动效果sv.alwaysBounceVertical YES;//显示横向滚动效果sv.showsHorizontalScrollIndicator YES;//显示纵向滚动条sv.showsVerticalScrollIndicator YES;//设置背景颜色sv.backgroundColor [UIColor whiteColor];//使用循环创建5张图片视图for (int i 0; i 5; i){NSString *strName [NSString stringWithFormat:%d.jpg, i1];UIImage *image [UIImage imageNamed:strName];UIImageView *iView [[UIImageView alloc] initWithImage:image];iView.frame CGRectMake(394*i, 0, 394, 952);[sv addSubview:iView];}[self.view addSubview:sv];
}end 滚动视图高级
滚动视图中还有一个协议叫UIScrollViewDelegate这个协议可以让我们实现更多控制效果。我们新建一个竖屏滚动效果来学习这个协议的方法。
#import ViewController.hinterface ViewController ()endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.scrollView [[UIScrollView alloc] init];scrollView.frame CGRectMake(10, 50, 384, 802);//取消弹动效果scrollView.bounces NO;//是否允许通过点击屏幕让滚动视图响应事件//YES滚动视图可以接受触碰事件//NO不接受触屏事件//scrollView.userInteractionEnabled NO;//设置画布大小纵向效果scrollView.contentSize CGSizeMake(384, 802*9);for (int i 0; i 9; i){//生成图片名称NSString *strName [NSString stringWithFormat:%d.jpg, i1];UIImage *image [UIImage imageNamed:strName];UIImageView *iView [[UIImageView alloc] init];iView.image image;iView.frame CGRectMake(0, 802 * i, 384, 802);[scrollView addSubview:iView];}[self.view addSubview:scrollView];//取消按页滚动效果scrollView.pagingEnabled NO;//滚动视图画布的移动位置偏移位置//功能决定画笔显示的最终图像结果scrollView.contentOffset CGPointMake(0, 0);//将当前视图控制器作为代理对象scrollView.delegate self;
}//当滚动视图移动时只要offset坐标发生变化都会调用此函数
//参数调用次协议的滚动视图对象
//可以使用此函数来监控滚动视图的位置
//- (void) scrollViewDidScroll:(UIScrollView *)scrollView
//{
// NSLog(y %f, scrollView.contentOffset.y);
//}- (void) touchesBegan:(NSSetUITouch * *)touches withEvent:(UIEvent *)event
{//scrollView.contentOffset CGPointMake(0, 0);//让滚动视图移动到指定位置动画移动[scrollView scrollRectToVisible:CGRectMake(0, 0, 384, 802) animated:YES];
}//结束滑动时调用
-(void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{NSLog(Did End Drag!);
}
//将要开始滑动时调用
-(void) scrollViewWillBeginDragging:(UIScrollView *)scrollView
{NSLog(will Begin Drag);
}
//结束滑动视图后准备结束滑行调用该函数
-(void) scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{NSLog(Will End Drag!);
}
//准备开始滑动时调用该方法
-(void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{NSLog(Will Begin Deceleratege!);
}
//停止滑动时调用该方法
-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{NSLog(视图停止移动);
}
end注意当结束滑动后会有一个类似于惯性的滑动效果此时会调用不同的方法。 效果 总结
多多学习多多思考。这篇博客的总结让我加深了对UI控件的认识并且熟练了很多UI控件的使用