如果我有一個UIView作爲UIScrollView的子視圖,並且這個滾動視圖是一個水平滾動視圖,我怎麼知道UIView(子視圖)何時不在UIScrollView中,以便我可以刪除它作爲子視圖並將其存儲在其他地方以供重用?有這樣的代表嗎?UISiew裏面的UIScrollView問題
回答
是的,這是一個委託,你需要使用UIScrollViewDelegate。
的方法scrollViewDidScroll告訴你,當滾動追加,所以在這個功能,你可以測試contentOffset財產(scrollview.contentOffset.x),然後將它與您的視圖的位置和大小比較(myView.frame.origin.x + myView.frame.size.width)。
所以basicaly你應該做的
if(scrollview.contentOffset.x > (myView.frame.origin.x + myView.frame.size.width))
//Remove my view to reuse it
如果你只有2次顯示,只是想重新使用每個視圖中,你可以找到當前顯示的是這樣的觀點:
//Assuming your views had the same width and it is store in the pageWidth variable
float currPosition = photoGalleryScrollView.contentOffset.x;
//We look for the selected page by comparing his width with the current scroll view position
int selectedPage = roundf(currPosition/pageWidth);
float truePosition = selectedPage * pageWidth;
int zone = selectedPage % 2;
BOOL view1Active = zone == 0;
UIView *nextView = view1Active ? view2 : view1;
UIView *currentView = view1Active ? view1 : view2;
//We search after the next page
int nextpage = truePosition > currPos + 1 ? selectedPage-1 : selectedPage+1;
//then we compare our next page with the selectd page
if(nextpage > selectedPage){
//show next view
}
else{
//show previous view
}
之後,您需要向nextView添加一些內容,將其添加到滾動視圖並在隱藏時刪除currentView。
如果我想知道這個視圖是否因爲用戶水平向左或向右水平滑動而消失了,該怎麼辦? – xonegirlz
您可以使用UIScrollViewDelegate方法scrollViewDidEndDecelerating:
和一些自定義代碼來實現此目的。
- (void)viewDidLoad {
[super viewDidLoad];
//set theScrollView's delegate
theScrollView.delegate = self;
}
//custom method for determining visible rect of scrollView
- (CGRect)visibleRectForScrollView:(UIScrollView *)scrollView; {
CGFloat scale = (CGFloat) 1.0/scrollView.zoomScale;
CGRect visibleRect;
visibleRect.origin = scrollView.contentOffset;
visibleRect.size = scrollView.bounds.size;
float theScale = 1.0/scale;
visibleRect.origin.x *= theScale;
visibleRect.origin.y *= theScale;
visibleRect.size.width *= theScale;
visibleRect.size.height *= theScale;
return visibleRect;
}
//UIScrollView Delegate method
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
BOOL viewVisisble = CGRectContainsRect([self visisbleRectForScrollView:theScrollView], theView.frame);
if(!viewVisisble) {
//do something
}
}
visibleRect是一個CGRect,但你正在返回一個CGFloat? – xonegirlz
顯然這是一個錯誤,你可以看到它說CGRect在代碼中的方法 –
- 1. iPhone - UISiew裏面的UIScrollView不滾動
- 2. 問題裏面的UIScrollView
- 3. UIScrollView裏面的UIScrollView裏面的UIScrollView
- 4. UITextView裏面的UIScrollView滾動問題
- 5. 在UISiew上UIScrollview的屏幕上的幀
- 6. UIpageviewcontroller裏面的UIScrollview
- 7. UITableView裏面的UIScrollView
- 8. UIScrollView裏面的UIStackView
- 9. UITableViews裏面的UIScrollView
- 10. 的UIWebView裏面的UIScrollView裏面的UITableViewCell
- 11. 翻轉UIScrollView裏面的UIView
- 12. 目標C:UIScrollView裏面的UIScrollView
- 13. 的UIScrollView裏面一個UITableViewCell
- 14. UIScrollView內UIScrollView問題
- 15. 問題裏面GSP
- 16. UIToolbar在UIWebView裏面UIScrollView
- 17. UIPageViewController裏面的UIScrollView:當UIScrollView滾動時無法滑動頁面
- 18. 問題裏面的preg_replace
- 19. 問題裏面的UpdatePanel
- 20. UITabBarController裏面的UINavigationController問題
- 21. ListView裏面的TextView:setTextHighlightColor()問題
- 22. 的UIScrollView setContentOffset:topOffset問題
- 23. 的UIScrollView contentSize問題
- 24. UIScrollview的ContentOffset問題
- 25. UIScrollView問題
- 26. UIScrollView問題
- 27. UIScrollView問題
- 28. UIScrollView問題
- 29. uiscrollview問題
- 30. UIScrollView + UIToolbar問題
什麼是總體使用情況?通常你會把UIView放在那裏,以便當他們回滾時。 –
用例是我想擁有一個UIView池,因爲在屏幕上每次只有3個子視圖。當他們回滾時,我想從我的池中重用UIView。有點像UITableView單元,你可以重用 – xonegirlz