iOS學習——ScrollView圖片輪播和同類控件優先級問題

iOS學習——ScrollView的使用和同類控件優先級問題

1. 布置界面

ScrollView的使用非常簡單,只有三步
1.1 添加一個scrollview
1.2 向scrollview添加內容
1.3 告訴scrollview中內容的實際大小

首先做第一步,布置界面。
拖拽一個scrollview就可以了
拖拽一個scrollview
就這么簡單


2. 添加內容,并告訴scrollview中內容的實際大小

先給scrollview拖線至viewController的.m文件類擴展中

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

再要給scrollview設置代理,讓代理處理相應的事件、設置相應的數據。設置代理的方法有兩種:拖線和代碼設置。

拖線:
拖線設置代理

代碼設置,在viewDidLoad方法中設置scrollview的代理為控制器本身。

self.scrollView.delegate = self;

注意,把控制器設為代理需要實現相應代理的接口:
實現相應代理的接口

現在開始添加內容,向Images.xcassets放入要用的五張圖片素材,因為博主做的5張圖是白色背景,為了能看清,只能把控制器背景調成其他顏色。
素材

- (void)viewDidLoad {[super viewDidLoad];// 動態創建UIImageView添加到滾動控件CGFloat imgW = 340;CGFloat imgH = 150;CGFloat imgY = 0;CGFloat imgX;// 加入五張圖片for (int i = 0; i < 5; i++) {UIImageView *imgView = [[UIImageView alloc] init];// 計算每張圖的x值imgView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d", i + 1]];imgX = i * imgW;imgView.frame = CGRectMake(imgX, imgY, imgW, imgH);[self.scrollView addSubview:imgView];}// 設置滾動控件內容大小self.scrollView.contentSize = CGSizeMake(5 * self.scrollView.frame.size.width, 150);
}

解釋為什么要計算每張圖片的x軸:
圖片實際上是這樣擺放的:
這里寫圖片描述
橘色的是scrollView,每張圖片和scrollView長寬一樣大,所以只能看到一張圖片,五張圖片并排放置,這樣滾動scrollView時候就能瀏覽后面的圖片,實現滾動效果。

如果不希望有滾動指示器,就是滾動條,可以加入:

// 設置滾動指示器不可見
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;

這時運行后發現可以滾動,但是圖片可以滾動到任何位置
e149d03ede7b0f30t.jpg
如果希望能夠像平常淘寶看到的圖片輪播,輕輕劃一下,可以完整的翻到下一張圖片,可以加入:

// 實現分頁效果,原理是根據滾動控件的寬度,一個寬度是一頁
self.scrollView.pagingEnabled = YES;

fa374a4a1ad8d16bt.jpg


3. 設置自動輪播

通過計時器控件計時

1 先為控制器添加一個timer

@property (nonatomic, strong) NSTimer *timer;

2 viewDidLoad中創建計時器控件

// 創建計時器控件,設定每過兩秒執行`scrollImage`方法
self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(scrollImage) userInfo:nil repeats:YES];

3 實現@selector指定的方法

- (void) scrollImage {NSInteger page = self.scrollView.contentOffset.x / self.scrollView.frame.size.width;// 判斷是否在最后一頁,如果是最后一頁設置頁碼重新設置為第一頁if (page == 4) {page = 0;} else {page ++;}CGFloat offsetX = page * self.scrollView.frame.size.width;[self.scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];
}

這時候就能看見圖片2秒滾動一次了。


4. 同類控件優先級問題

問題描述

當界面中有兩個scrollview(或其子類控件)時,在滾動其中一個scrollview時候,設置了計時器的scrollview會暫定自動滾動。
比如拽入一個textView:
c2abd5a14b54c34ct.jpg
如果滾動下面的文字,上面的圖片輪播不會繼續自動滾動。

問題原因

問題的原因是因為計時器的優先級和view(各種控件)的優先級不同,所以會優先執行view的動作。

解決方法

將計時器的優先級設置和view的優先級相同

// 修改優先級
// 獲取當前的消息循環
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:self.timer forMode:NSRunLoopCommonModes];

源代碼

如果需要源代碼,博主已經上傳:http://download.csdn.net/detail/u010127917/9042503


有什么問題都可以在博文后面留言,或者私信,或者微博上找我。
博主主要寫javaee和iOS的。
希望大家一起進步。
我的微博:小魚周凌宇
小魚周凌宇的微博

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

轉載于:https://www.cnblogs.com/coderfish/p/4875459.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374593.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374593.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374593.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Exchanger和無GC的Java

總覽 Exchanger類在線程之間傳遞工作和回收使用的對象方面非常有效。 AFAIK&#xff0c;它也是最少使用的并發類之一。 但是&#xff0c;如果您不需要GC&#xff0c;則使用ArrayBlockingQueue進行日志記錄會更簡單。 交換器類 Exchanger類對于在兩個線程之間來回傳遞數據很有…

構造函數的反射

1 import java.lang.reflect.Constructor;2 3 public class zzbds {4 public static void main(String[] args) {5 6 try{ 7 Class cStudent.class; //獲得無參構造函數8 Constructor constructorc.getConstructor(new Class[]{…

字符串連接“+”int、char、string

String s1 "21" "8" "54";System.out.println(s1);String s2 "21" 8 "54";System.out.println(s2);String s3 "21" 8 "54";System.out.println(s3);21854 21854 21854

使用Spring使用Java發送電子郵件– GMail SMTP服務器示例

對于使用Java發送電子郵件&#xff0c; JavaMail API是標準解決方案。 如官方網頁所述&#xff0c;“ JavaMail API提供了獨立于平臺和協議的框架來構建郵件和消息傳遞應用程序”。 必需的類包含在JavaEE平臺中&#xff0c;但是要在獨立的JavaSE應用程序中使用它&#xff0c;您…

Java字符與數字的計算

先看例子&#xff1a; char ch;int x;int y 7;System.out.print("7的ASCII碼值是&#xff1a;");System.out.println(y);ch 7 2;System.out.print("7 2的char型&#xff1a;");System.out.println(ch);x 7 2;System.out.print("7 2的int型&…

wordcount

源代碼如下 package org.apache.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io…

EJB 3.1全局JNDI訪問

如本系列前面的部分所述&#xff0c;EJB 3.0版規范的主要缺點是缺少可移植的全局JNDI名稱。 這意味著沒有可移植的方式將EJB引用鏈接到應用程序外部的Bean。 EJB v。3.1規范用自己的話填補了這一定義&#xff1a; “一個標準化的全局JNDI名稱空間和一系列相關的名稱空間&#…

Git 分支管理和沖突解決

創建分支 git branch 沒有參數&#xff0c;顯示本地版本庫中所有的本地分支名稱。 當前檢出分支的前面會有星號。 git branch newname 在當前檢出分支上新建分支&#xff0c;名叫newname。 git checkout newname 檢出分支&#xff0c;即切換到名叫newname的分支。 git checkout…

力扣打開轉盤鎖

打開轉盤鎖 評論區大神代碼&#xff1a; public int openLock(String[] deadends, String target) {Set<String> set new HashSet<>(Arrays.asList(deadends));//開始遍歷的字符串是"0000"&#xff0c;相當于根節點String startStr "0000";i…

EJB程序化查找

在上一篇文章中&#xff0c;我們了解了EJB 引用和EJB 注入 。 盡管EJB注入是一種強大的容器工具&#xff0c;可以簡化模塊化應用程序的開發&#xff0c;但有時還是需要執行程序化EJB查找。 讓我們假設&#xff0c;例如&#xff0c;一組不同的EJB實現了由公共業務接口定義的公共…

git克隆/更新/提交代碼步驟及示意圖

1. git clone ssh://flycm.intel.com/scm/at/atSrc 或者git clone ssh://flycm.intel.com/scm/at/atJar 或者git clone ssh://flycm.intel.com/scm/at/atFramework 2. git checkout cpeg/scm/stable 切換分支&#xff0c;然后更新代碼 3. git pull 先把遠程分支上最新的代碼拉到…

C++面試寶典

1.new、delete、malloc、free關系 delete會調用對象的析構函數,和new對應free只會釋放內存&#xff0c;new調用構造函數。malloc與free是C/C語言的標準庫函數&#xff0c;new/delete是C的運算符。它們都可用于申請動態內存和釋放內存。對于非內部數據類型的對象而言&#xff0c…

Google App Engine:在您自己的域中托管應用程序

在Google App Engine中創建新應用程序時&#xff0c;您將獲得一個域名“ yourapp.appspot.com”。 但是&#xff0c;誰會想要以這樣的后綴托管他們的應用程序&#xff08;除非您喜歡它&#xff01;&#xff09;&#xff1f; 為了改善您的應用品牌&#xff0c;最好的辦法是將您的…

從零開始學 iOS 開發的15條建議

事情困難是事實&#xff0c;再困難的事還是要每天努力去做是更大的事實。 因為我是一路自學過來的&#xff0c;并且公認沒什么天賦的前提下&#xff0c;進步得不算太慢&#xff0c;所以有很多打算從零開始的朋友會問我&#xff0c;該怎么學iOS開發。跟粉絲群的朋友交流了一下&a…

垂直居中-父元素高度確定的多行文本(方法二)

除了上一節講到的插入table標簽&#xff0c;可以使父元素高度確定的多行文本垂直居中之外&#xff0c;本節介紹另外一種實現這種效果的方法。但這種方法兼容性比較差&#xff0c;只是提供大家學習參考。 在 chrome、firefox 及 IE8 以上的瀏覽器下可以設置塊級元素的 display 為…

13. 羅馬數字轉整數

羅馬數字轉整數 class Solution {public int romanToInt(String s) {Map<Character,Integer> map new HashMap<Character,Integer>(){{put(I,1);put(V,5);put(X,10);put(L,50);put(C,100);put(D,500);put(M,1000);}};int res 0;for(int i 0;i<s.length();i)…

互聯網金融P2P主業務場景自動化測試

互聯網金融P2P行業&#xff0c;近三年來發展迅速&#xff0c;如火如荼。據不完全統計&#xff0c;全國有3000的企業。“互聯網”企業&#xff0c;幾乎每天都會碰到一些奇奇怪怪的bug&#xff0c;作為在互聯網企業工作的測試人員&#xff0c;風險和壓力都巨大。那么我們如何降低…

OSGi將Maven與Equinox結合使用

很長時間以來&#xff0c;我一直在努力理解OSGi的真正含義。 它已經存在很長時間了&#xff0c;但是沒有多少人意識到這一點。 人們已經大肆宣傳它是一種非常復雜的技術。 這是我為所有Java開發人員簡化的嘗試。 簡而言之&#xff0c; OSGi是一組規范&#xff0c;這些規范允許對…

note05-計算機網絡

5.網絡安全 被動攻擊(UDP報文被截獲 被 進行流量分析) 主動攻擊 1.篡改(更改報文流 偽報文) 2.惡意程序(病毒、木馬、蠕蟲、炸彈) 3.拒絕服務Dos 密碼體制 1.對稱密鑰密碼體制(DES IDEA) 即加密和解密的密鑰K相同 2.公鑰密碼體制(RSA) A加密使用PKB公鑰 B解密使用對應的私鑰SK…

825. 適齡的朋友

適齡的朋友 在社交媒體網站上有 n 個用戶。給你一個整數數組 ages &#xff0c;其中 ages[i] 是第 i 個用戶的年齡。 如果下述任意一個條件為真&#xff0c;那么用戶 x 將不會向用戶 y&#xff08;x ! y&#xff09;發送好友請求&#xff1a; age[y] < 0.5 * age[x] 7 ag…