UIScrollView屬性及其代理方法

一、UIScrollView是什么?

1、UIScrollView是滾動的view,UIView本身不能滾動,子類UIScrollview拓展了滾動方面的功能。
2、UIScrollView是所有滾動視圖的基類。以后的UITableView,UITextView等視圖都是繼承于該類。
使用場景:顯示不下(單張大圖);內容太多(圖文混排);滾動頭條(圖片);相冊等

二、UIScrollView使用

1、UIScrollview主要專長于兩個方面:
      a、滾動:contentSize大于frame.size的時候,能夠滾動。
      b、 縮放:自帶縮放,可以指定縮放倍數。
2、UIScrollView滾動相關屬性contentSize
 //定義內容區(qū)域大小,決定是否能夠滑動
contentOffset    //視圖左上角距離坐標原點的偏移量
scrollsToTop      //滑動到頂部(點狀態(tài)條的時候)
pagingEnabled   //是否整屏翻動
bounces           //邊界是否回彈
scrollEnabled     //是否能夠滾動
showsHorizontalScrollIndicator //控制是否顯示水平方向的滾動條
showVerticalScrollIndicator       //控制是否顯示垂直方向的滾動條
alwaysBounceVertical           //控制垂直方向遇到邊框是否反彈
alwaysBounceHorizontal       //控制水平方向遇到邊框是否反彈
3、UIScrollView縮放相關屬性
minimumZoomScale  //  縮小的最小比例
maximumZoomScale   //放大的最大比例
zoomScale                  //設置變化比例
zooming                      //判斷是否正在進行縮放反彈
bouncesZoom             //控制縮放的時候是否會反彈
要實現縮放,還需要實現delegate,指定縮放的視圖是誰。
4.UIScrollView滾動實例應用
- (void)scrollView{
    // 創(chuàng)建滾動視圖,但我們現實的屏幕超過一屏時,就需要滾動視圖
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
    scrollView.backgroundColor = [UIColor yellowColor];
    scrollView.tag = 1000;
    // 設置滾動區(qū)域
    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; // (記得導入協(xié)議代理 <UIScrollViewAccessibilityDelegate>)
}

5、UIScrollView滾動代理方法
// 滾動就會觸發(fā)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{    NSLog(@"只有scrollview是跟滾動狀態(tài)就會調用此方法");
}
//開始拖拽時觸發(fā)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    NSLog(@"開始拖拽");
    
}
// 結束拖拽時觸發(fā)
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView  willDecelerate:(BOOL)decelerate{
        NSLog(@"結束拖拽");
}
// 開始減速時觸發(fā)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
        NSLog(@"開始減速");
    
}
// 結束減速時觸發(fā)(停止)
- (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;
    // 這里我們規(guī)定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);
    
}

// 正在縮放的代理方法  只要在縮放就執(zhí)行該方法,所以此方法會在縮放過程中多次調用
- (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));
}


// 縮放結束所執(zhí)行的代理方法
/**
 *  @ view    當前正在縮放的視圖
 *  @ scale  當前正在縮放視圖的縮放比例
 */
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
    // 縮放完成之后恢復原大小,這里運用到2D仿射變換函數中與捏合有關的函數
    view.transform =CGAffineTransformMakeScale(1, 1);
       
    
}
8、成品 (可以左右滑動切換圖片)
這是第0個視圖.png
這是第2個視圖.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容