欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

UIScrollView属性及其代理方法

程序员文章站 2022-05-17 16:16:24
一、UIScrollView是什么? 1、UIScrollView是滚动的view,UIView本身不能滚动,子类UIScrollview拓展了滚动方面的功能。 2、UIScrollView是所有滚动视图的基类。以后的UITableView,UITextView等视图都是继承于该类。 使用场景:显示 ......

一、uiscrollview是什么?

1、uiscrollview是滚动的view,uiview本身不能滚动,子类uiscrollview拓展了滚动方面的功能。
2、uiscrollview是所有滚动视图的基类。以后的uitableview,uitextview等视图都是继承于该类。
使用场景:显示不下(单张大图);内容太多(图文混排);滚动头条(图片);相册等

二、uiscrollview使用

1、uiscrollview主要专长于两个方面:
a、滚动:contentsize大于frame.size的时候,能够滚动。
b、 缩放:自带缩放,可以指定缩放倍数。
2、uiscrollview滚动相关属性contentsize
 //定义内容区域大小,决定是否能够滑动
contentoffset    //视图左上角距离坐标原点的偏移量
scrollstotop      //滑动到顶部(点状态条的时候)
pagingenabled   //是否整屏翻动
bounces           //边界是否回弹
scrollenabled     //是否能够滚动
showshorizontalscrollindicator //控制是否显示水平方向的滚动条
showverticalscrollindicator       //控制是否显示垂直方向的滚动条
alwaysbouncevertical           //控制垂直方向遇到边框是否反弹
alwaysbouncehorizontal       //控制水平方向遇到边框是否反弹
3、uiscrollview缩放相关属性
minimumzoomscale  //  缩小的最小比例
maximumzoomscale   //放大的最大比例
zoomscale                  //设置变化比例
zooming                      //判断是否正在进行缩放反弹
bounceszoom             //控制缩放的时候是否会反弹
要实现缩放,还需要实现delegate,指定缩放的视图是谁。
4.uiscrollview滚动实例应用
- (void)scrollview{
    // 创建滚动视图,但我们现实的屏幕超过一屏时,就需要滚动视图
    uiscrollview *scrollview = [[uiscrollview alloc] initwithframe:self.view.frame];
    scrollview.backgroundcolor = [uicolor yellowcolor];
    scrollview.tag = 1000;
    // 设置滚动区域
    scrollview.contentsize = cgsizemake(4 * cgrectgetwidth(self.view.frame), self.view.frame.size.height);
    [self.view addsubview:scrollview];
    // 添加子视图
    for (int i = 0; i < 4; i ++) {
        uilabel *label = [[uilabel alloc] initwithframe:cgrectmake(cgrectgetwidth(self.view.frame) * i, 0, cgrectgetwidth(self.view.frame), cgrectgetheight(self.view.frame))];
        label.text = [nsstring stringwithformat:@"这是%d个视图",i];
        label.font = [uifont systemfontofsize:30];
        [scrollview addsubview:label];
        uiimageview *imageview = [[uiimageview alloc] initwithimage:[uiimage imagenamed:[nsstring stringwithformat:@"%d.jpg",i]]]; // (有四张片分别取名0.jpg,1.jpg,2.jpg.3.jpg)
        [imageview setframe:self.view.frame];
        [label addsubview:imageview];

//        label.backgroundcolor = [uicolor colorwithred:arc4random()%256/255.0 green:
//            arc4random()%256/255.0  blue:arc4random()%256/255.0  alpha:1];
        
    }
    // 设置分页效果 (默认值为no)
    scrollview.pagingenabled = yes;
    // 设置滚动条是否显示(默认值是yes)
    scrollview.showshorizontalscrollindicator = yes;
    // 设置边界是否有反弹效果(默认值是yes)
    scrollview.bounces = yes;
    // 设置滚动条的样式
    scrollview.indicatorstyle = uiscrollviewindicatorstylewhite; 
    /*
indicatorstyle(枚举值)  
   uiscrollviewindicatorstyledefault,     //白色
   uiscrollviewindicatorstyleblack,       //  黑色
     */
    
    // 设置scrollview的代理
    scrollview.delegate = self; // (记得导入协议代理 <uiscrollviewaccessibilitydelegate>)
}
5、uiscrollview滚动代理方法
// 滚动就会触发
- (void)scrollviewdidscroll:(uiscrollview *)scrollview
{    nslog(@"只有scrollview是跟滚动状态就会调用此方法");
}
//开始拖拽时触发
- (void)scrollviewwillbegindragging:(uiscrollview *)scrollview{
    nslog(@"开始拖拽");
}
// 结束拖拽时触发
- (void)scrollviewdidenddragging:(uiscrollview *)scrollview  willdecelerate:(bool)decelerate{
        nslog(@"结束拖拽");
}
// 开始减速时触发
- (void)scrollviewwillbegindecelerating:(uiscrollview *)scrollview{
        nslog(@"开始减速");
}
// 结束减速时触发(停止)
- (void)scrollviewdidenddecelerating:(uiscrollview *)scrollview{
        nslog(@"结束减速(停止)");
}
6、uiscrollview缩放实例应用
- (void)viewdidload {
    [super viewdidload];
    self.view.backgroundcolor = [uicolor orangecolor];
    // 初始化一个scrollview
    uiscrollview *scrollview = [[uiscrollview alloc] initwithframe:self.view.frame];
    scrollview.backgroundcolor = [uicolor greencolor];
    scrollview.delegate = self;

    // 设置缩放比率
    // 设置可缩小道德最小比例
    scrollview.minimumzoomscale = 0.5;
    // 设置可放大的最大比例
    scrollview.maximumzoomscale = 2.0;
    [self.view addsubview:scrollview];

    // 使得要添加的图片宽高成比例
    uiimage *myimage = [uiimage imagenamed:@"7.jpg"];
    // 得到原始宽高
    float imagewidth = myimage.size.width;
    float imageheight = myimage.size.height;
    // 这里我们规定imageview的宽为200,根据此宽度得到等比例的高度
    float imageviewwidth = 200;
    float imageviewheight = 200 *imageheight/imagewidth;
    // 初始化一个uiimageview
    uiimageview *imageview = [[uiimageview alloc] initwithframe:cgrectmake(0, 0, imageviewwidth, imageviewheight)];
    // 为imageview设置图片
    imageview.image = myimage;
    // 让imageview居中
    imageview.center = self.view.center;
    imageview.tag = 1000;
    [scrollview addsubview:imageview];
}

7、uiscrollview缩放有关的代理

#pragma mark -- 滚动视图与缩放有关的代理方法
//指定scrollview的某一个子视图为可缩放视图,前提条件是次视图已经添加到scrollview上面
-(uiview*)viewforzoominginscrollview:(uiscrollview *)scrollview{
    uiview *imageview = (uiview*)[scrollview viewwithtag:1000];
    return imageview;
}

// 开始缩放的代理方法  第二个参数view:这个参数使我们将要缩放的视图(这里就是imageview)
- (void)scrollviewwillbeginzooming:(uiscrollview *)scrollview withview:(uiview *)view{
    nslog(@"%@",view);
}

// 正在缩放的代理方法  只要在缩放就执行该方法,所以此方法会在缩放过程中多次调用
- (void)scrollviewdidzoom:(uiscrollview *)scrollview{
    // 在缩放过程中为了使得该视图一直在屏幕中间,所以我们需要在他缩放的过程中一直调整他的center
    // 得到scrollview的子视图
    uiimageview *imageview = (uiimageview *)[scrollview viewwithtag:1000];
    // 打印imageview的frame,分析为什么他的位置会改变
  //  nslog(@"frame -- %@",nsstringfromcgrect(imageview.frame));
    
    // 设置imageview的center,是他的位置一直在屏幕*
    imageview.center = scrollview.center;
    // 打印contentsize  分析为什么缩放之后会滑动
    nslog(@"contentsize %@",nsstringfromcgsize(scrollview.contentsize));
}

// 缩放结束所执行的代理方法
/**
 *  @ view    当前正在缩放的视图
 *  @ scale  当前正在缩放视图的缩放比例
 */
- (void)scrollviewdidendzooming:(uiscrollview *)scrollview withview:(uiview *)view atscale:(cgfloat)scale{
    // 缩放完成之后恢复原大小,这里运用到2d仿射变换函数中与捏合有关的函数
    view.transform =cgaffinetransformmakescale(1, 1);
}