簡體   English   中英

如何使用UIScrollView以編程方式強制滾動?

[英]How do you programmatically force a scroll using UIScrollView?

我有一個水平的 UIScrollview設置(意思是它不是向上和向下滾動但只向左滾動的一個)並且在應用程序啟動時,我希望這個滾動視圖向左滾動,然后向右滾動 - 有點“展示”它的滾動的能力 - 然后最后停止,然后讓用戶接管並用手指手動控制滾動。 一切正常 - 除了這個有載的左右演示滾動。

我沒有使用Interface Builder,我正在用代碼做任何事情:

//(this is in viewDidLoad:)
// Create the scrollView:
UIScrollView *photosScroll = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 320, 200)];
[photosScroll setContentSize: CGSizeMake(1240, 200)]; 
// Add it as a subview to the mainView
[mainView addSubview:photosScroll];


// Set the photoScroll's delegate: 
photosScroll.delegate = self;

// Create a frame to which to scroll:   
CGRect frame = CGRectMake(10, 10, 80, 150);
// Scroll to that frame:
[photosScroll scrollRectToVisible: frame animated:YES];

所以scrollView加載成功,我可以用我的手指左右滾動它 - 但它不會像我希望的那樣“自動滾動”。

  • 我嘗試在將scrollView添加為子視圖之前和之后調用scrollRectToVisible - 不起作用。
  • 想想這可能發生在loadView而不是viewDidLoad中? 但如果是這樣,怎么樣?

有任何想法嗎?

有兩種方法可以做到這一點:

  1. 使用scrollRectToVisible:animated:對於零X值,然后是一個大的正值,然后將其設置回中間點。 滾動視圖作為子視圖添加后可以調用該方法(可能之前也是如此,但最好是安全的)。 您需要使用contentSize計算左邊屏幕的X值,並了解滾動視圖中各種元素的寬度。
  2. 由於你只是做一個快速動畫並且會給用戶控制,這可能是一個快速而又臟的動畫,所以你可以使用setContentOffset:animated:強制滾動視圖的內容相對於你當前的視圖移動位置。 將元素向右移動以進行左滾動(正X值),然后向左移動兩次以進行右滾動(負X值),然后將偏移設置回零。

你不應該把這些中的任何一個放在viewDidLoadloadView ; 把它們放在viewDidAppear ,這是在你的滾動視圖實際繪制在屏幕上之后。 您只關心用戶可以看到的動畫!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM