UIScrollView屬性及其代理方法

来源:https://www.cnblogs.com/jiuyi/archive/2019/02/01/10346269.html
-Advertisement-
Play Games

一、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);
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.什麼是鎖: 對共用資源進行併發訪問,提供數據的完整性和一致性。 2.鎖的區別: Lock Manager的哈希表中 latch是針對程式內部的資源(比如:全局變數)的鎖的定義,而這裡的lock針對的是資料庫的事務。 lock有latch來保證和實現。 3.鎖是用來實現併發控制,併發控制用來實現隔 ...
  • “查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 null )” ——翻譯為:課程表裡面,存在01的信息,未必滿足有02的課程情況 ——覺得題意不是很明確,但是就當成練習left join 和right join的理解 1、存在01課程情況 SELECT * from s ...
  • 什麼是Intent Intent可以理解為信使(意圖) 由Intent來協作完成Android各個組件之間的通訊, 也可以說是實現頁面與頁面之間的跳轉 Intent實現頁面之間的跳轉 startActivityForResult(intent, requestCode); //第二種啟動方式 onA ...
  • 微信小程式 人臉識別登陸的實現 關鍵詞:微信小程式 人臉識別 百度雲介面 前言 這是一篇關於一個原創微信小程式開發過程的原創文章。涉及到的核心技術是微信小程式開發方法和百度雲人臉識別介面。小程式的主體是一個用於個人密碼存儲的密碼管理器,在登陸註冊階段,需要調用百度雲人臉識別介面以及百度雲線上人臉庫的 ...
  • 跨功能需求(Cross-Functional Requirements, CFR)通常被稱為非功能需求(Non-Functional Requirements, NFR), 也可以叫做系統質量屬性(System Quality Attributes/Traits), 是指那些用來評價系統運行狀態的需... ...
  • 在上一篇 學習安卓開發[4] 使用隱式Intent啟動簡訊、聯繫人、相機應用 中瞭解了在調用其它應用的功能時隱式Intent的使用,本次基於一個圖片瀏覽APP的開發,記錄使用AsyncTask在後臺執行HTTP任務以獲取圖片URL,然後使用HandlerThread動態下載和顯示圖片 HTTP 請求 ...
  • 本文以一個簡單的小例子,簡述Android開發中GridView的常見應用,僅供學習分享使用。 ...
  • 參考文章: "約束佈局ConstraintLayout看這一篇就夠了" "ConstraintLayout 屬性篇" 介紹 Android 是谷歌推出替代 的組件。 支持相對佈局、線性佈局、幀佈局,看來更像是 、 t、`RelativeLayout·三者的結合體,並且比這三者更強大的是實現了百分比布 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...