UIView внутри UIScrollView проблемы - PullRequest
0 голосов
/ 06 октября 2011

Если у меня есть UIView как подпредставление UIScrollView, и это представление прокрутки является горизонтальным представлением прокрутки, как я узнаю, когда UIView (подпредставление) выходит из UIScrollView, чтобы я мог удалить его как подпредставление и хранить его где-нибудь еще для повторного использования? Для этого есть делегат?

Ответы [ 2 ]

0 голосов
/ 06 октября 2011

Для этого можно использовать метод 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
    }
}
0 голосов
/ 06 октября 2011

Да, для этого есть делегат, вам нужно использовать UIScrollViewDelegate.

http://developer.apple.com/library/IOS/#documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html

Метод scrollViewDidScroll сообщает вам о добавлении прокрутки, поэтому в этой функции вы можете проверить свойство contentOffset ( scrollview.contentOffset.x ), а затем сравнить его с позицией и размером представления (). myView.frame.origin.x + myView.frame.size.width ).

По сути, вы должны сделать

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, когда он скрыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...