iOS基础控件(下)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

上篇介绍了UIButton、UILabel、UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView。

UIScrollView顾名思义也知道这个是和滚动相关的控件,在Android开发时遇到过ScrollView,当内容的尺寸超出了屏幕范围之后,用ScrollView则可以通过滚动的方式使得超出屏幕的那部分内容通过滚动的方式显示出来,在Android里面有水平的ScrollView和垂直的ScrollView,在iOS里面就只有一个ScrollView,而且这个ScrollView的功能更大,某些功能已经超出了ScrollView的作用范围了。下面则看一下ScrollView的一些属性

contentSize:CGSize类型,ScrollView的内容的实际大小;contentOffset:CGPoint类型,ScrollView当前滚动到的位置,以视图的左上角来定位;contentInset:UIEdgeInsets类型,用于增加ScrollView内容的滚动范围,相当于给ScrollView的四周补白;下面则是其他属性

bounces:BOOL类型,是否有弹簧效果scrollEnabled :BOOL类型,是否能滚动showsHorizontalScrollIndicator:BOOL类型,是否显示水平方向的滚动条showsVerticalScrollIndicator:BOOL类型,是否显示垂直方向的滚动条indicatorStyle:UIScrollViewIndicatorStyle类型,设定滚动条的样式,这个枚举类型有三个值UIScrollViewIndicatorStyleDefault

UIScrollViewIndicatorStyleBlack

UIScrollViewIndicatorStyleWhite

dragging:BOOL类型,是否正在被拖拽tracking:BOOL类型,当touch后还没有拖动的时候值是YES,否则NOdecelerating:BOOL类型,是否正在减速zooming:BOOL类型, 是否正在缩放ScrollView的最直接的功能就是滑动,但是但是它还兼备着手势缩放(在Android中需要在ImageView中使用Matrix),还有滑动翻页的功能(在Android中是通过ViewPager是实现),下面都通过代码来实现,在viewDidLoad方法中加入

UIImage *image=[UIImage imageNamed:@"Android Struct2.gif"];

self.imageView=[[UIImageView alloc]initWithImage:image];

self.imageView.tag=22;

[self.scrollView addSubview:self.imageView];

单纯通过上面的代码则可以实现滑动查看一幅图片的功能,一个UIScrollView其实也是一个容器,它里面的子空间都是通过addSubview方法添加进去,而最重要的则是通过设置contentSize这个属性来告诉UIScrollView究竟子控件的尺寸有多大。

手势缩放的示例是在上面的基础上再作修改,如果只需要单纯地实现手势缩放,主要是实现了UIScrollView的- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView方法,同时也要设置UIScrollView的最大最小的缩放比例:minimumZoomScale属性和maximumZoomScale属性,在viewDidLoad方法中加入

UIImage *image=[UIImage imageNamed:@"Android Struct2.gif"];

self.imageView=[[UIImageView alloc]initWithImage:image];

self.imageView.tag=22;

[self.scrollView addSubview:self.imageView];

self.scrollView.contentSize=imageView.image.size;

self.scrollView.maximumZoomScale=5;

self.scrollView.minimumZoomScale=0.2;

self.scrollView.delegate=self;

在视图控制器里面的类中加入下面的方法

-(UIView*) viewForZoomingInScrollView:(UIScrollView*)scrollView

{returnself.imageView;

}

如果要额外加一些手势则需要使用UITapGestureRecognizer,在viewDidLoad中加入

UITapGestureRecognizer *twoFingerTaPRecongizer=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewTwoFingerTapped)];

twoFingerTapRecongizer.numberOfTapsRequired=1;

twoFingerTapRecongizer.numberOfTouchesRequired=2;

[self.scrollView addGestureRecognizer:twoFingerTapRecongizer];

再定义下面这个方法

-(void)scrollViewTwoFingerTapped:(UITapGestureRecognizer*)recognizer

{

CGFloat newZoomScale=self.scrollView.zoomScale/1.5f;

newZoomScale=MAX(newZoomScale,self.scrollView.minimumZoomScale);

[self.scrollView setZoomScale:newZoomScale animated:true];

}

接下来说的是翻页功能,要想翻页功能最好是结合另一个控件UipageControl,关于这个控件有几个属性要列举一下

numberOfPages : 总页数currentPage : 当前的页码hidesForSinglePage : 当只有一页的时候,是否要隐藏视图监听要让UIScrollView进入翻页模式则需要设置pagingEnabled属性,把它设置成True。代码如下,在viewDidLoad中加入

1CGFloat w=self.view.frame.size.width;2CGFloat h=self.view.frame.size.height;3for(inti=0;i<3;i++)4{5UIImageView *imageView=[[UIImageView alloc]init];6imageView.frame=CGRectMake(i*w,0, w, h);7imageView.image=[UIImage imageNamed:@"African Daisy.gif"];89[self.scrollView addSubview:imageView];10}1112self.scrollView.contentSize=CGSizeMake(3*w,0);13self.scrollView.showsHorizontalScrollIndicator=false;14self.scrollView.pagingEnabled=true;15self.scrollView.delegate=self;1617UIPageControl *pagecontrol=[[UIPageControl alloc] init];18pagecontrol.center=CGPointMake(w*0.5,h-20);19pagecontrol.bounds=CGRectMake(0,0,150,50);20pagecontrol.numberOfPages=3;2122pagecontrol.pageIndicatorTintColor=[UIColor grayColor];23pagecontrol.currentPageIndicatorTintColor=[UIColor whiteColor];2425pagecontrol.enabled=false;26[self.view addSubview:pagecontrol];27_pageControl=pagecontrol;2829-(void) scrollViewDidScroll:(UIScrollView *)scrollView30{31intpage=scrollView.contentOffset.x/scrollView.frame.size.width;32_pageControl.currentPage=page;33}

UIAlertViewUIAlertView是消息弹窗,它的作用与效果不用多说了,要使用UIAlertView的就需要让控制器实现UIAlertViewDelegate协议。有用到的属性如下

title:消息框的标题message:消息框的内容numberOfButtons:按钮总数cancelButtonTitle:取消按钮的标题cancelButtonIndex:取消按钮的索引firstOtherButtonIndex:第一个其他类型按钮的索引visible:消息框可视alertViewStyle:UIAlertViewStyle类型,是消息框的类型,它是一个枚举类型,它的值如下UIAlertViewStyleDefault 只弹信息和按钮UIAlertViewStyleSecureTextInput 有一个textfield加密框UIAlertViewStylePlainTextInput 有一个不加密的textfieldUIAlertViewStyleLoginAndPassWordInput 有两个textfield,Login和password对于上面提到的按钮索引,是取消按钮和其他按钮组成的一个集合,其中第一个一般是Cancel按钮,它的索引是0,如果Cancel按钮没有设置,则它会是-1,其他则按添加的顺序。在iOS的消息框中,只有Cancel有特有名称,其他按钮则没有特有名称,都统称为OtherButton。

消息框的其中一个构造函数如下

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"AlertViewTest"message:@"message"delegate:self

cancelButtonTitle:@"Cancel"otherButtonTitles:@"OtherBtn1",@"OtherBtn2",@"OtherBtn3",nil];

上面otherButtonTitles参数可以添加多个按钮。添加按钮除了在构造函数里面弄之外,还可以通过方法添加。如果不需要Cancel按钮,则给参数传一个nil值

[alert addButtonWithTitle:@"addButton"];

让消息框显示则需要调用下面的方法

[alert show];

消息框还有一系列的事件

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{//这个事件在消息框上面的按钮被点击之后触发,通过buttonIndex来确定究竟是哪个按钮被点击,然后采取相应的动作}

还有其他6个事件方法

1-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex2{3//AlertView已经消失时执行的事件4}56-(void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex7{8//ALertView即将消失时的事件9}1011-(void)alertViewCancel:(UIAlertView *)alertView12{13//AlertView的取消按钮的事件,但这个事件一直我没有触发过14}1516-(void)didPresentAlertView:(UIAlertView *)alertView17{18//AlertView已经显示时的事件19}2021-(void)willPresentAlertView:(UIAlertView *)alertView22{23//AlertView即将显示时24}2526-(BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView27{28//第一个触发的事件29}

对于上面一系列的事件大体可以分为两类,显示的事件,他们触发顺序如下

alertViewShouldEnableFirstOtherButton——>willPresentAlertView——>didPresentAlertView

另一类是消失的事件,是在点击后才会触发

clickedButtonAtIndex——>(如果会触发视图取消,则会调用alertViewCancel)willDismissWithButtonIndex——>didDismissWithButtonIndex

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航