苹果ios14.0计时器 |
您所在的位置:网站首页 › connecttohost返回值 › 苹果ios14.0计时器 |
controller:连接二者的桥梁; cocoa frameworks 有两个框架: foundation foundation 是cocoa中最基本的一些类;再mac应用程序中负责对象管理,内存管理,容器等相关数据; uikit: uikit:为程序提供可视化的底层构架,包括窗口,视图,控件类和管理这些对象的控制器。这一层中的其它框架允许你访问用户联系人和图片信息,以及设备上的加速器和其它硬件特征; UI(User Interface)编程 9.3第八周,周一 创建ios项目 1.打开iOS中的application; 2.UIViewController:视图控件,通过点击,触摸来控制程序 3.UIView :视图; 4.在项目中创建一个文件。在 iOS的cocoa touch创建一个 ulviewcontrollersubclass类然后在AppDelegate.m中找到application函数,在 self.window.backgroundColor = [UIColor whiteColor];后写如下代码 RootViewCotroller *rvc=[[RootViewCotroller alloc]initWithNibName:@"RootViewCotroller" bundle:nil]; self.window.rootViewController=rvc; [rvc release]; 代码含义:创建根控件,并把新创建的根控件赋值给窗口的根控件;注意释放; 5.label控件的创建和属性: 可以用视图界面创建;然后修改属性; 6.代码实现label 1.IBOutlet :是个宏。控件和根界面控件内容建立联系 2.atomic:原子操作;线成保护;就是在几个线程中调用同一段内容时导致所用内容混乱,进行枷锁机制 nonatomic:不加锁机制;能提高效率; 把控件打包,并和界面添加的控件建立联系: 3.在RootViewCotroller.m文件中在viewDidLoad(加载函数)函数中设置lable的属性; 4.iPhone 横向320 竖向480 横条占20; 所以一般是320*460 创建给label并在屏幕上定位 CGRect rect={0,100,100,40}; //创建定位结构体; 坐标原点是左上角;四个参数分别是距左框的距离;距上框的距离;label控件的宽度,高度; UILabel *label=[[UILabel alloc] initWithFrame:rect]; UILabel *label=[[UILabel alloc] 可一直接生成UIrect; initWithFrame:CGRectMake(, , , )] 5.UIView * 指所有可视控件; 6.设置背景色 [label1 setBackgroundColor:[UIColor blueColor]]; 7.设置label的字体; [label2 setFont:[UIFont systemFontOfSize:20]]; label1.font=[UIFont italicSystemFontOfSize:30]; 8.设置字体的颜色 label2.textColor=[UIColor redColor]; 9.设置字体的对齐方式; label1.textAlignment=UITextAlignmentLeft; 10.自动调整字体 label1.adjustsFontSizeToFitWidth=YES; 当文字数量多时可以自动调整字体大小 如果不设置就会变成省略; 字体省略方式: label2.lineBreakMode=UILineBreakModeHeadTruncation; 这个是截去头,还有尾截,和中间截去; label2.lineBreakMode=UILineBreakModeClip; 表示在已有控件写多少是多少,不写省略符 label1.lineBreakMode=UILineBreakModeCharacterWrap; 字符换行,指只要需要换行就换行不考虑单词的整体性; label1.lineBreakMode=UILineBreakModeWordWrap; 以一个整个单词换行,不允许把整个单词分开写到不同的行;保持单词完整性; 设置自动调整的最小限制 label1.minimumFontSize=10; 11.设置行数: label1.numberOfLines=3; 注:如果行高不够的话它不能显示完整; 字体省略方式 12.设置高亮颜色 label1.highlightedTextColor=[UIColor whiteColor]; 设置高亮的状态时的颜色; label1.highlighted=YES; 把label设置为高亮状态; 13.设置阴影色 label1.shadowColor=[UIColor blackColor]; 设置阴影颜色; label1.shadowOffset=CGSizeMake(-2,-2 );//只有长和宽 没有 起始位置 设置阴影位置;是相对字体的位置; 14.IOPhone的图标默认大小时57*57; 9.4周二 1. IBAction 时void型的,为了连接某个触发; 2.button创建 button1=[UIButton buttonWithType:UIButtonTypeRoundedRect] 注:这样创建的button不是alloc出来的不用释放; 后面参数时button 的外观; 3.button设置位置: button1.frame=CGRectMake(120, 280, 80, 40); 4.button 设置title [button1 setTitle:@"click here" forState:UIControlStateNormal]; 注:由于button继承view control所以它可以设置状态; 状态的作用? 答:可以在不同状态下展示不同的button 特点; 1.高亮状态下设置 [button1 setTitle:@"click ready" forState:UIControlStateHighlighted]; 2.禁用状态设置 [button1 setTitle:@"forbid using" forState:UIControlStateDisabled]; button1.enabled=NO; button设置成不可用,但是还可以更改button 的属性 5. 设置button的title的属性; button1.titleLabel.font=[UIFont systemFontOfSize:20]; 注:button是复合了label所以可以调用title label,设置它的 文本属性就是设置button的文本属性; 6设置 颜色 [button1 setTitleColor:[UIColor yellowColor] forState:UIControlStateNormal]; 7.给button添加事件 [button1 addTarget:self action:@selector(onclick) forControlEvents:UIControlEventTouchUpInside]; addTarget:指触发的对象; action:触发的事件; forControlEvets:是表示如何点击按钮触发; 8.局部声明button,如何使用button使其执行动作; 在事件函数头传递button对象;谁调用它就传递谁的地址; -(void)onclick:(UIButton *)seder [button addTarget:self action:@selector(onclick:) forControlEvents:UIControlEventTouchUpInside]; 注意:传递调用函数带参数有冒号; 9.添加图片 UIImage *image=[UIImage imageNamed:@"03.gif"]; [button setBackgroundImage:image forState:UIControlStateNormal]; [button setBackgroundImage:image1 forState:UIControlStateHighlighted]; 10.得到图片大小 CGSize size=image.size; NSLog(@"%f %f",size.width,size.height); 11.让button一直处于选择状态; button.selected=YES; button会一直处于一个状态而不改变? 到底什么意思 12. 判断button状态执行操作; if(button.state==UIControlStateNormal){ } 13.移出事件 [sender removeTarget:self action:@selector(onclick:) forControlEvents:UIControlEventTouchDragOutside]; 14.点击滑动的妙用;可以在作程序时加入实现触屏效果; [button addTarget:self action:@selector(onclick:) forControlEvents:UIControlEventTouchDragInside]; [button addTarget:self action:@selector(onclick:) forControlEvents:UIControlEventTouchDragOutside]; 9.6周四 UIView (视图) 1.什么是uiview 在应用程序中看的见摸的着的是视图。相当于java中容器; viewController相当于底板; 2.创建视图 UIView *view=[[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 420)]; 3.将视图添加到父视图 [self.view addSubview:view]; 注意:子视图是父视图的子类,后添加的视图在最上曾; 4.在视图view中添加label(label 是view的子类) [view addSubview:label]; 注:由于ui中的控件都是视图,所以可以在任意视图加载其他视图; 把一些视图装到另一个视图是为了保证视图的整体性; 注:在button上添加label点击label就是点击button label相当于透明;而在上添button就是点谁谁响应; 5. CGRectframe :坐标 CGRectbounds:边界 button.bounds=CGRectMake(0, 0, 50, 50); CGPointcenter:中点 该是图的中点在父视图的相对坐标; button.center=CGPointMake(160, 230); 指视图的中心位置在父视图的相对位置 得到视图的终点坐标: button.center.x; button.center.y; 6.视图层次 视图子类是个数组; 视图先添加的在下,后添加在上; 交换视图位置: [button1 exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; 1.遍历视图 for (UILabel * l in button1.subviews) { l.text=[NSString stringWithFormat:@"%d",i++]; } 2.插入视图 [button1 insertSubview:label3 atIndex:1]; 将视图label3插入到视图button1的第二位; [button1 insertSubview:label2 aboveSubview:label1]; 将视图label2插到label1上; [button1 insertSubview:label1 belowSubview:label3]; 3.将视图从父类视图中移出; [label2 removeFromSuperview]; 4.[button1 delete:label2]; 5.将视图放到最上层 ; [button1 bringSubviewToFront:label1]; 注:写代码时把子视图写到一块,父视图写到一块 6.把视图放到最上下层 [button1 sendSubviewToBack:label1]; 7.判断某个视图是某个视图的子视图 返回类型是bool类型; [label1 isDescendantOfView:button1]; 7.tag 视图的标志; 可以标志视图。是set 和get函数,设置和取得可以用“.”操作 button1.tag=1; 8.label1.superview 表示label1的父视图; 9. 隐藏视图 :label1.hidden=YES; 默认为no。 应用:可以让视图重叠换灯片放映,或动画;如果父视图隐藏,子视图也随之消失 10.视图可能会超出父视图的范围;这时可以更改父视图边界属性裁减出边界 的子视图 button1.clipsToBounds=YES; UIImageView 1.初始化: UIImageView *imageview=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"2.jpg"]]; imageview.frame=CGRectMake(20, 20, 140, 220); imageview.contentMode=UIViewContentModeScaleAspectFit; 让添加的图片按比例填充; 3.imageview和label都不能触发事件 但是可以给他们添加事件 //点击事件 搞清楚是单击还是双击 来处理事件 //声明点击手势 初始化点击手势识别器 当单击判断失败 在触发单击;先判断,不知道是单击还是双击 UITapGestureRecognizer *tgr=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onclick)];//来添加事件 tgr.numberOfTapsRequired=1;//区分单击还是双击 tgr.numberOfTapsRequired=2; [tag addTarget:self action :@selecter(press:)];//事件 //创建敲击事件的接收器; [imageview addGestureRecognizer:tgr];//这个视图来响应,把手势加到视图上面 4. imageview.UserInteractionEnabled=YES; //是否能和用户交互; 5.三中图片填充方式 imageview.contentMode=UIViewContentModeScaleAspectFit; imageview.contentMode=UIViewContentModeScaleAspectFill; //按比例添满会超出边界。所以如果超出可以裁减 imageview.clipsToBounds=YES; imageview.contentMode=UIViewContentModeScaleToFill; //添满 6.创建视图还可以在appDelegate.m中的application中声明实现 7. 子视图按某中形式随父视图扩大或缩小;不同的扩大缩小方式特点可以或 labelsub.autoresizingMask=UIViewAutoresizingFlexibleWidth; labelsub.autoresizingMask=UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 控制视图按比例的开关; labelsub.autoresizesSubviews=NO; MVC:设计思想: model:内存数据 view :可视控件;controller:控制代码; 单例:从头到尾使用的类 RootController *rvc=[[RootController alloc]initWithNibName:@"RootController" bundle:nil];//有xib文件时创建连接文件,以后最好没有xib文件,xib文件降低速度 以后初始化要不创建xib文件初始化方法是: RootController *rvc=[[RootController alloc]init]; kvo/kvc:? notification:? 窗口: iphono内存占用量不超过20Mb 全屏做法 1.记下此时的控件fram 2.修改控件的大小,使其全屏 3.把改图像拉到顶层; 4.修改tag 字体新设置: label.font=[UIFont fontWithName:@"宋体" size:30]; timer 1.创建定时器,一但创建就开始运行; NSTimer *timer=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(changLabel) userInfo:nil repeats:YES]; 2,定时器停止;一旦停止就释放,相当于release; [timer invalidate]; 3,打开定时器 [timer fire] 4.动画效果 ' UITextField:对话框 同样是个view 1.创建 UITextField *field=[[UITextField alloc] initWithFrame:CGRectMake(40, 20, 250, 60)]; 2.设置边框 UITextField *field=[[UITextField alloc] initWithFrame:CGRectMake(40, 20, 250, 60)]; 3.在文本框后面设置清除键 field.clearButtonMode=UITextFieldViewModeAlways; 4.设置初始文本 field.placeholder=@"username"; 5。设置文本变为隐藏; field.secureTextEntry=YES; 6.设置textfield的自定义函数 首先在.h文件中提交协议 这样就可以自定义textfield 函数;注:自定义函数如果是返回bool类型的函数说明这个函数是一个监听函数;自定义都是进行某些动作时自动调用; 7.-(void)textFieldDidBeginEditing:(UITextField *)textField 当文本框进入编辑模式时自动调用 8.退出编辑模式时调用函数; -(void)textFieldDidEndEditing:(UITextField *)textField { ( (UILabel *)[self.view.subviews objectAtIndex:0]).text=textField.text; } 9.点击键盘上return后调用的函数 -(BOOL)textFieldShouldReturn:(UITextField *)textField 10.关闭键盘函数; [textField resignFirstResponder]; return NO; 11.限定输入字符的长度函数 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { //textfield表示谁调用该函数, if (string.length>0) //string 表示当前输入的字符; return textField.text.length=__IPHONE_5_0) { [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@""] forBarMetrics:UIBarMetricsDefault]; } 如果是5.0以下的可以创建类别 //通过类别创建图像 @implementation UINavigationBar(Custom) -(void)drawRect:(CGRect)rect{ UIImage *image=[UIImage imageNamed:@""]; [image drawInRect:rect]; } 7.隐藏导航条 [self.navigationController setNavigationBarHidden:YES animated:YES]; 8.直接跳转到某页 1.创建数组把控制页面全部加载进来; NSMutableArray *array=[NSMutableArray arrayWithArray:self.navigationController.viewControllers]; 2.设置跳转到哪页 [self.navigationController popToViewController:[array objectAtIndex:0] animated:YES]; 能够设置的常项 创建一个可变空数组; NSMutableArray *array1=[[NSMutableArray alloc]initWithCapacity:0]; 用数组设置navigationController的ViewControllers //[self.navigationController setViewControllers:array]; self.navigationController.viewControllers=array; 9.在子导航条中去除自带得返回上一级得button self.navigationItem.hidesBackButton=YES; ToolBar工具条 1.创建工具条:为单个viewcontroller添加toolbar UIToolbar *toobar=[[UIToolbar alloc] initWithFrame:CGRectMake(0,372,320, 44)]; 注:一定要注意创建导航条后当前的viewcontroller的坐标原点已经改变是加上导航条后的的高度;导航条的高度是44; toolbar.tintColor=[UIColor purpleColor]; toolbar的颜色设置;和导航条设置一样; toobar.hidden=NO; 注:toolbar的hidden属性默认是yes,所以加toolbar要把hidden设置为no; 2. 在导航条中有toolbar属性;所以要想每页都加toolbar 就可以在这里把导航条的toolbar的hidden属性设置为no; ]; UINavigationController *nv=[[UINavigationController alloc]initWithRootViewController:vc]; nv.toolbarHidden=NO; nv.toolbar.tintColor=[UIColor purpleColor]; [nv setNavigationBarHidden:YES animated:YES]; 3.把按钮写成一个数组然后添加到toolbar [array addObject:button]; //设置viewcontroller的toolbar以数组初始化; //toobar的button不能调整大小; // self.toolbarItems. [self setToolbarItems:array animated:YES]; 4.验证两个coloer属性; tinkcoloer: 9.12 周三 //六个控件 UISlider 滑条控件//滑动条控件 滑条初始化: UISlider *sl=[[UISlider alloc]initWithFrame:CGRectMake(30, 60, 280, 30)]; 1.滑条的高度不用设置因为系统默认 ;但是可以设置背景图改变滑条的高度;具体看滑条的图片设置 创建label用来显示滑动的数值 UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; view控件的tag属性可以作为区分视图的标志想查找它时可以在另一个函数中写 UILabel *label=(UILabel *)[self.view viewWithTag:100]; label.tag=100; 设置滑条的最大值和最小值; sl.minimumValue=0.0; sl.maximumValue=20.0; 给滑条添加事件,由于滑条的值是可变的所以监听它时用值改变事件监听,以后一般遇到值可以不断改变的view控件要用值改变事件监听; [sl addTarget:self action:@selector(valuechang:) forControlEvents:UIControlEventValueChanged]; // 设置默认滑条位置; sl.value=10.0; 设置大小端图像; sl.maximumValueImage=[UIImage imageNamed:@"5.png"]; 设置滑条轨迹的颜色 sl.minimumTrackTintColor=[UIColor purpleColor]; sl.maximumTrackTintColor=[UIColor redColor]; sl.thumbTintColor=[UIColor greenColor]; //点击按钮分高亮状态和非高亮状态;所以要注意设置那个状态; [sl setThumbImage:[UIImage imageNamed:@"5.png"] forState:UIControlStateNormal]; // 设置滑条的最大最小图像;注:1滑点滑动部分变大图像会被拉伸,如果图像到达原大小在压缩不会变化;2.如果滑条设置背景图片就会改变滑条的宽度,而且只 能是改变minimumValueImag此时的图片高度就是滑条的高度;原因:因为滑条的大端是开始的占空间大小;显示的滑动进度是在原有基础上添加的 所以大端改变整个滑条才会改变 [sl setMinimumTrackImage:[UIImage imageNamed:@"5.png"] forState:UIControlStateNormal]; [sl setMaximumTrackImage:[UIImage imageNamed:@"5.png"] forState:UIControlStateNormal]; 简单的滑条触发事件测试:滑条值的改变显示在label控件上; -(void)valuechang:(UISlider *)sender { UILabel *label=(UILabel *)[self.view viewWithTag:100]; label.text=[NSString stringWithFormat:@"%.0f",sender.value]; } UISwitch:开关控件//创建开关控件 初始化switch对象 UISwitch * _swith=[[UISwitch alloc] initWithFrame:CGRectMake(100, 100, 0, 0)]; 给with添加事件注意 事件控制是UIControlEventValueChanged [_swith addTarget:self action:@selector(sw:) forControlEvents:UIControlEventValueChanged]; 设置with的打开时背景色 _swith.onTintColor=[UIColor blackColor]; 注:不用设置switch的宽高。因为时系统默认;设置没有作用; 给switch添加switch事件:状态改变一次触发一次 -(void)sw:(UISwitch *)swith { if (switch.on==YES) NSLog(@"yes"); else NSLog(@"no"); } UIActivityIndicatorView:加载缓控件 //加载缓冲页面;初始化 UIActivityIndicatorView *aiv=[[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(100, 100, 0, 0)]; 设置当停止时隐藏 aiv.hidesWhenStopped=NO; 设置旋转图标的样式。一共有三种 aiv.activityIndicatorViewStyle=UIActivityIndicatorViewStyleWhiteLarge; 设置缓冲图标的颜色 注:要先设置样式在设置颜色,因为样式是带颜色,能覆盖以前的颜色; aiv.color=[UIColor blueColor]; 缓冲图标开始,停止动画; [aiv startAnimating]; [aiv stopAnimating]; UIProgressView:进度条 初始化进度条 UIProgressView *pgv=[[UIProgressView alloc] initWithFrame:CGRectMake(50, 100, 220, 0)]; 设置进度条的tag属性; pgv.tag=100; pgv.progressViewStyle=UIProgressViewStyleBar; //颜色设置 pgv.progressTintColor=[UIColor purpleColor]; pgv.trackTintColor=[UIColor blackColor]; //进度条图片设置 pgv.progressImage=[UIImage imageNamed:@""]; pgv.trackImage=[UIImage imageNamed:@""]; //用时间控制器模拟时间进度条; [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(refresh:) userInfo:nil repeats:YES]; //用函数对进度条做试验 -(void)refresh:(NSTimer *)timer { UIProgressView *pv=(UIProgressView *)[self.view viewWithTag:100]; [pv setProgress:pv.progress+0.1 animated:YES]; if (pv.progress==1) { NSLog(@"%d",[timer retainCount]); [timer invalidate]; // [timer release]; //注意在ui中运用封装好的函数生成的控件不要给他们release它有他自动释放或需要调用释放函数;所以不必管它 NSLog(@"%d",[timer retainCount]); } UITextView 文本编辑器 文本编辑器和文本框一样有代理函数在.h文件开头需引入; @interface ViewController : UIViewController 它的代理函数和文本框的基本相同,不同的有两个 -(void)textViewDidChange:(UITextView *)textView:(UITextView *)textView -(void)textViewDidChangeSelection:(UITextView *)textView 注:在调用代理函数时一定要textview的代理设置为调用函数所在的类; 文本框的一些属性设置: 1.初始化文本框 UITextView *textView=[[UITextView alloc]initWithFrame:CGRectMake(0, 0, 320, 100)]; 2.文本框的颜色,对齐方式,字体设置 textView.textColor=[UIColor grayColor]; textView.textAlignment=UITextAlignmentLeft; textView.font=[UIFont systemFontOfSize:30]; 3。自动纠错关闭; textView.autocorrectionType=NO; 4.大写模式;除此之外还可以设置字母不大写;句首字母大写。单词开头字母大写; textView.autocapitalizationType=UITextAutocapitalizationTypeAllCharacters; 5.键盘模式: textView.keyboardType=UIKeyboardTypePhonePad;//打电话模式 textView.returnKeyType=UIReturnKeyGo;返回模式变为go //根据输入框需要输入的内容不同要设置键盘的样式 UIStepper 计步器//创建一个计步器 1.初始化 //ValueChanged 点击是要用这种模式 UIStepper *stepper=[[UIStepper alloc]initWithFrame:CGRectMake(100, 200, 100, 40)]; 2.给stepper添加触发事件,还是注意 forControlEvents:UIControlEventValueChanged的设置 [stepper addTarget:self action:@selector(stepper:) forControlEvents:UIControlEventValueChanged]; 3.设置stepper的最大最小值 stepper.minimumValue=0; stepper.maximumValue=50; 4. //常按可以自动加默认是yes 长按就一直进行 stepper.autorepeat=YES;//autorepeat是否连续的执行这一操作或者响应 //最小和最大间循环; stepper.wraps=YES; //设置每次增长值 stepper.stepValue=2; //设置按键时是否显示每次加的值;如果设为no常按键会加到走好几个步长的值 stepper.continuous=NO;//continue单位时间内是否响应 UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(50, 50, 100, 50)]; label.font=[UIFont systemFontOfSize:30]; [self.view addSubview:label]; label.tag=100; -(void)stepper:(UIStepper *)stepper { UILabel *label=(UILabel *)[self.view viewWithTag:100]; label.text=[NSString stringWithFormat:@"%f",stepper.value]; } UISegmentedControl 分段控制器;//创建分段控制器 1.分段控制器初始化 UISegmentedControl *sc=[[UISegmentedControl alloc]initWithItems:[NSArray arrayWithObjects:@"a",@"b",@"c",[UIImage imageNamed:@"5.png"], nil]]; 2 分段控制器设置frame sc.frame=CGRectMake(100, 100, 150, 40); 3. 为分段控制器添加监听事件; [sc addTarget:self action:@selector(sc:) forControlEvents:UIControlEventTouchUpInside]; //注这个触发事件监听是ValueChanged,为了监听按钮 4。控制类型控制类型一共有四种; sc.segmentedControlStyle=UISegmentedControlStyleBordered; 5。按钮自动弹起开启;默认是no; sc.momentary=YES; 6。添加新按钮;可以是文字,或图像; [sc insertSegmentWithTitle:@"e" atIndex:3 animated:YES]; [sc insertSegmentWithImage: atIndex: animated:] 7.在段控制器中区分点击那个按钮的个属性 //一共有多少个按钮; int i=sc.numberOfSegments; //当前点击的按钮位置; int j=sc.selectedSegmentIndex; //移出当前点击的段; [sc removeSegmentAtIndex:j animated:YES]; //移出所有的段; [sc removeAllSegments]; UIGesture 手势事件 1.移动手势 1.创建移动手势的对象: UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; 2.把此对象添加到操作的对象中; [imagview addGestureRecognizer:pan]; 3.实现移动对象的方法 -(void)pan:(UIPanGestureRecognizer *)pan { CGPoint point=[pan translationInView:self.view]; //这个函数是得到触点在屏幕上与开始触摸点的位移值 imagview.center=CGPointMake(imagview.center.x+point.x, imagview.center.y+point.y); //让图像的中心位置变化;中心变化图像位置就移动了 ,但是注意位移时如果不清空translation就会多移动一倍;所以每次要让pan的位置零; [pan setTranslation:CGPointMake(0, 0) inView:self.view]; } 2.扩大缩小手势 1.创建扩大缩小手势的对象 在创建时就带了要触发的事件 手势器 UIPinchGestureRecognizer *pinch=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinch:)]; 2. 记录下开始图像的大小,在扩大缩小函数时使用;原因是扩大尺寸是在图像的现有大小上乘,而图像的尺寸是变化的所以会使图像扩大缩小的太过火;所以纪录原图 像大小一直在这个基础上扩大 size=CGSizeMake(imagview.bounds.size.width,imagview.bounds.size.height ); 3.图像添加扩大缩小手势; [imagview addGestureRecognizer:pinch]; 4.图像扩大缩小手势触发的事件; -(void)pinch:(UIPinchGestureRecognizer *)pinch { 改变图像的大小;pinch.scale是触摸点的相对于原有位置的位移量的倍数。 imagview.bounds=CGRectMake(0, 0,size.width*pinch.scale, size.height*pinch.scale); 为了防止每次扩大缩小都要从原图开始,所以操作结束释放触点一次就要把当前的尺寸记下,下次变化在这个基础上改变; if (pinch.state==UIGestureRecognizerStateEnded) { size=CGSizeMake(imagview.bounds.size.width, imagview.bounds.size.height); } gesture.scale=1.0f;//这个很重要 3.旋转手势 //电话在手机里面优先级是最高的 1.旋转角度对象的初始化 UIRotationGestureRecognizer *rotation=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotation:)]; 2.给旋转图像添加旋转对象 [imagview addGestureRecognizer:rotation]; 3.旋转时触发的函数 -(void)rotation:(UIRotationGestureRecognizer *)rotation { 让图像旋转某个角度,这个交度使相对原图旋转的角度。所以必须有个判断语句,如果释放一次触点就要把当前位置记下,否则图像还会回到原来状态; imagview.transform=CGAffineTransformMakeRotation(f+rotation.rotation); if (rotation.state==UIGestureRecognizerStateEnded) { f=f+rotation.rotation; } } 4.tap的一些属性 可以给image添加tap事件 tap.numberOfTapsRequired=2;//点击几次触发事件,点击次数必须是连续点击 tap.numberOfTouchesRequired=2;//设置触摸点数 只有两个触点存在时点击才能触发事件 5.触摸时自动调用的触摸函数一共有四个 触点事件调用时UITouch对象产生后自动调用的属性;由于单击的话只有一共对象;所以不论有几个touch对象都时指当前鼠标触点?那为什么还要创建触点对象呢?而anyobject之外还能做什么 1. 触摸开始触发的事件 //开始触屏的时候touchesBegan -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"began"); 建立触摸对象 触摸对象是任意触点;但是事实是当前鼠标点击的点;但是怎么得到另一个点的坐标? UITouch *touch=[touches anyObject];//anyObject 任何触摸的东西都储存在里面 if(touch.tapCount==1) { NSLog(@"这是一个单击事件"); } else if(touch.tapCount==2) { NSLog(@"这是一个双击事件"); } CGPoint point=[touch locationInView:self.view]; NSLog(@"%f %f",point.x,point.y); // 可以调用touch开始点和touch结束点做加减得到移动大小, 但是这样做很麻烦,ui有封装好的方法 UIPanGestureRecognizer // touch只调用第一触电大小,怎么得到第二个点?} //手指离开屏幕的时候 2.触摸事件结束触发事件 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"end"); } 3.cancell实在移动时突然被其他进程打断时调用。比如突来电话 -(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"cancel"); } 4.触点移动时触发的事件; //手指移动发生的事件 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch=[touches anyObject]; CGPoint point=[touch locationInView:self.view]; UIImageView * imageView=(UIImage *)[self.view viewWithTag:101]; CGRect NSLog(@"move"); } [performSelector:@selector(single Tag)withObject:nil afterDelay:delaytime]//实现函数的调用,延时调用,相当于多线程 9.13周四 1.各个控制器间的关系: window 的rootviewcontroller可以是uinavigationcontroller ,uitabbarcontroller ,uiviewcontroller uinavigationconroller 上可以添加uiviewcontroller uitabbarcontroller上可以添加uiviewcontrolller 也可以添加uinavigationcontroller 到此基本上控制器的关系弄清了; 1.UITabBarController :标签控制器,分栏控制器 当uitabbarcontroller含的uitabbaritem很多时,编译器会自动隐藏以省略号表示,点击省略号就可以查看不显示的item 1.初始化: UITabBarController *tc=[[UITabBarController alloc]init]; 2.创建视图控制器然后创建 UITabBarItem并把它赋给视图控制器的 tabBarItem ViewController *vc=[[[ViewController alloc]init]autorelease]; UITabBarItem *item=[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemSearch tag:0]; 注:可以自定义item 也可以用系统中定义好的; vc.tabBarItem=item; 3.创建导航条;用于放人UITabBarController 由此可知uitabbarcontronller和uinavigationcontroller的包含关系; UINavigationController *nc=[[UINavigationController alloc]initWithRootViewController:vc]; 4.添加导航控件和视图控件; tc.viewControllers= [NSArray arrayWithObjects:nc,vc1,vc2, nil]; 5.让根控制器为标签控制器 self.window.rootViewController=tc; 2.解决不显示第二个以后的标签问题 1.原因:如果把每个控制器的标签生成写在viewdidload里面由于为了节省内存开始只会加载一个控制器。所以只能显示第一个标签; ViewController1 *vc1=[[[ViewController1 alloc]init]autorelease]; //注如不使用vc1显示是没有其图,因为还不加载它的程序 vc1.view.backgroundColor=[UIColor blueColor]; 2.解决方法:1.init函数中生成控制器标签生成代码;在创建控制器时就会执行; 2. 在appdelegate中生成控制器的标签 3.在appdelegate 中调用控制器的函数 3.本地存储: NSUserDefaults:一旦运行数据就会被存储下来,每次运行程序以前的纪录下来的数据仍然有; //只能保存NSString NSNumber NSData,NSDictionary; NSArray;这五种类型;(其他的是需要强转的 类似于 图片的) //保存到本地,一旦保存,再运行还有数据,所以可以达到数据在不通页面间的传递 NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults]; //为本地存储添加数据;类似于字典的用法 [userDefault setObject:@"adba" forKey:@"key"]; //同步操作,保存到本地; [userDefault synchronize]; 同步了才可以保存到本地的 //获取以前存储的数据; NSString * str=[userDefault objectForKey:@"key"];//根据关键字取出对应的用户默认数据 NSLog(@"%@",str); //实现UITabBarControllerDelegate代理的方法 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { NSLog(@"You selected: %d",tabBarController.selectedIndex); //只是一个单例 NSUserDefaults *ud=[NSUserDefaults standardUserDefaults];//用来存储数据的数据库 创建一个指针来存储和取出数据 [ud setInteger:tabBarController.selectedIndex forKey:@"LAST_PAGE"]; [ud synchronize];//将新添加的数据存盘 } //下面4个方法 不是属于类的方法 是系统本来已经提供的方法 只跟视图控制器的出现和消失有关系的 //视图将要出现的时候 - (void)viewWillAppear:(BOOL)animated; // Called when the view is about to made visible. Default does nothing //视图已经出现的时候 - (void)viewDidAppear:(BOOL)animated; // Called when the view has been fully transitioned onto the screen. Default does nothing //视图将要消失的时候 - (void)viewWillDisappear:(BOOL)animated; // Called when the view is dismissed, covered or otherwise hidden. Default does nothing //视图已经消失的时候 - (void)viewDidDisappear:(BOOL)animated; // Called after the view was dismissed, covered or otherwise hidden. Default does nothing 4.数据字典:NSDictionary:用于存储数据可以和数组联合起来用; 1.字典的初始化方法 1.直接用数值初始化: NSDictionary *dic1=[[NSDictionary alloc]initWithObjects:[NSArray arrayWithObjects:@"",@"", nil] forKeys:[NSArray arrayWithObjects:@"",@"", nil]] ; 2.用数组初始化 NSArray *array=[[NSArray alloc]initWithObjects:@"23",@"100",@"zhang" ,nil]; NSArray *array2=[[NSArray alloc] initWithObjects:@"年龄",@"体重",@"姓名", nil]; NSDictionary *dic1=[[NSDictionary alloc]initWithObjects:array forKeys:array2]; 3.用其他字典初始化 NSDictionary *dic=[[NSDictionary alloc]initWithDictionary:dic1]; 4.用网络URL初始化 NSDictionary *dic5=[NSDictionary alloc]initWithContentsOfURL: 2.通过key来找到对应的值; NSLog(@"%@",[dic objectForKey:@"key"]); 3.创建动态字典 用法和普通字典一样; NSMutableDictionary *dic3=[NSMutableDictionary dictionaryWithCapacity:0]; 4.为动态字典添加内容; [dic2 setObject:@"180" forKey:@"身高"]; [dic2 setObject:@"56" forKey:@"weight"]; [dic2 setObject:@"13" forKey:@"age"]; NSNumber 数值对象 1.初始化数值对象 用一个基础数据类型初始化,如整形,浮点,字符都可以; NSNumber *num=[NSNumber numberWithInt:vc.tabBarItem.tag ]; 2.把数值对象添加到数组中; [array addObject:num]; 3.把nsstring类型转换成值;和把数值类型转换成整形 int i=1; NSString *str=[NSString stringWithFormat:@"%d",i]; int a=[str intValue];//其他数值形式的也可以类似转换 如float b=[str floatValue]; UITabBarController的代理函数; uitabbarcontroller 中当item很多时会有省略;还可以调整uitabbaritem的排放顺序调整在主页显示的页面;这时会需要tabbarcontroller 的代理类 1.当某个viewcontroller被选择时触发的事件; 应用:每当页面显示时有些提示信息…….. -(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { NSLog(@"didSelectViewController"); // NSLog(@"%d",tabBarController.tabBarItem.tag); NSLog(@"%d",viewController.tabBarItem.tag); } 2.在某个viewcontroller选择时触发的事件 -(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { NSLog(@"shouldSelectViewController:"); NSLog(@"%d",viewController.tabBarItem.tag); return YES; } 3 将要结束用户自定义item时;既点击导航栏中的done时调用用法:可以提示用户确实要这样更改吗。 -(void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { NSLog(@"willEndCustomizingViewControllers"); //NSLog(@"%d",viewControllers) NSLog(@"%d",changed); } 4.将开始进行用户自定义item时调用;既点击了导航栏中的edit时调用此函数; -(void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers { } 5.结束用户自定义item后调用既单击了done ;用法可以纪录此时的新的item用于永久性更改,下次运行此程序保持这个状态; -(void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { NSMutableArray *array=[NSMutableArray arrayWithCapacity:0]; for (UIViewController *vc in viewControllers) { NSNumber *num=[NSNumber numberWithInt:vc.tabBarItem.tag ]; [array addObject:num]; // NSLog(@"%d",vc.tabBarItem.tag); //把nsstring转换成数据类型 // int i=1; // NSString *str=[NSString stringWithFormat:@"%d",i]; // int a=[str intValue]; } NSUserDefaults *userdefault=[NSUserDefaults standardUserDefaults]; [userdefault setObject:array forKey:@"num"]; NSLog(@"didEndCustomizingViewController"); } 如何保存用户更改的uitabbaritem位置? 1. 在用户用编辑item顺序后执行done,这时在调用的didEndCustomizingViewControllers 函数传递的参数viewControllers 纪录了此时新的排列顺序;这时要用本地存储记下这个顺序;注意因为每个viewcontroller在初始化时设置了自己的tag值,所以只记下tag值 就可以找到对应的viewcontroller -(void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { 初始化可变数组用于存储tag值 NSMutableArray *array=[NSMutableArray arrayWithCapacity:0]; 遍历新设置的控制器顺序;并把tag值按顺序存储到可变数组中 for (UIViewController *vc in viewControllers) { NSNumber *num=[NSNumber numberWithInt:vc.tabBarItem.tag ]; [array addObject:num]; } 定义本地存储对象; NSUserDefaults *userdefault=[NSUserDefaults standardUserDefaults]; 把可辨数组存入到本地存储中 [userdefault setObject:array forKey:@"num"]; NSLog(@"didEndCustomizingViewController"); } 2. 在加载函数中可以先判断本地存储是否有数据;如果没有就是用户还未设置过,那item顺序要按加载顺序排列;如果非空的话就把本地存储的数据的赋值给viewcontrollers; NSMutableArray *array=[NSMutableArray arrayWithCapacity:0]; for (int i=0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |