苹果ios14.0计时器

您所在的位置:网站首页 connecttohost返回值 苹果ios14.0计时器

苹果ios14.0计时器

2023-03-25 14:48| 来源: 网络整理| 查看: 265

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