Видеть большую область фона UIScrollView при увеличении и панорамировании - PullRequest
0 голосов
/ 05 марта 2011

Задача

Проблема, с которой я сталкиваюсь, заключается в том, что я увеличиваю свой UIScrollView (с включенной подкачкой страниц), а затем перемещаюсь (прокручивать?) Вниз - я могу хорошо перетаскивать свое представление и видеть большую область фона прокрутки. Чем дальше я увеличиваю изображение, тем больше фона от UIScrollView. (Я установил зеленый фон прокрутки, чтобы я мог видеть, на что смотрю).

Не уверен, почему фоновая область выставляется так ...?

Я поиграл с настройкой размера кадра прокрутки, размера границ, размера контента и т. Д. В разных местах безрезультатно.

К сожалению, я не могу публиковать скриншоты того, что происходит из-за того, что я новый пользователь: (

Дополнительная информация:

Основной вид моего приложения содержит полноэкранный размер UIScrollView, заполненный несколькими подпредставлениями UIView. Эти подпредставления добавляются в представление прокрутки путем создания имен перьев в цикле for, а затем извлечения их с помощью метода loadNibNamed для создания и добавления UIView.

Каждый из этих UIViews был разработан в IB и содержит следующее: UIImageView, атрибут изображения которого установлен на изображение .jpg, еще один меньший UIScrollView под ним и прозрачный UIView поверх моего viewview, который содержит кучу пользовательских UIButtons.

После того, как я заполнил свой scrollView, я установил некоторые его атрибуты, такие как contentSize, pagingEnabled, min & maxZoomScale и т. Д., А затем установил его делегат self (MainViewController).

Основные методы MainViewController:

@implementation MainViewController_iPhone

@synthesize scrollView, loadedNibView;

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {   
    [super viewDidLoad];
    [self loadNibs];
    [self initializeOrientation];
}

-(void) loadNibs {
    currentPage = 0;

    for (int i = 0; i < NUM_VIEWS; i++) {
        loadedNibView = [self getNibView:i];        //load the UIView from the associated nib file
        loadedNibView.tag = i;                      //used later to retrieve view for current page
        [scrollView addSubview:loadedNibView];
    }

    //Set the content size to sum of the widths of the all UIViews
    scrollView.contentSize = CGSizeMake(self.view.frame.size.width * NUM_VIEWS, self.view.frame.size.height);
    scrollView.pagingEnabled = YES;
    scrollView.bounces = YES;
    scrollView.clipsToBounds = YES;                 
    //scrollView.alwaysBounceVertical = YES;

    //zoom features
    scrollView.maximumZoomScale = 5.0;
    scrollView.minimumZoomScale = 1;                

    scrollView.delegate = self;                     
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)myScrollView {   
    return [myScrollView viewWithTag:(currentPage)];
}

- (void)scrollViewDidScroll:(UIScrollView *)myScrollView {
    CGFloat pageWidth = myScrollView.frame.size.width;
    currentPage = floor((myScrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
}

- (void)scrollViewDidZoom:(UIScrollView *)myScrollView {
}

- (void)scrollViewWillBeginZooming:(UIScrollView *)myScrollView withView:(UIView *)view
{   
    //zooming & paging do not work well together; disable paging while we're zooming
    myScrollView.pagingEnabled = NO;
}

- (void)scrollViewDidEndZooming:(UIScrollView *)myScrollView withView:(UIView *)view atScale:(float)scale  
{   
    if(scale == 1)  //if we're zoomed entirely back out
    {
    //re-enable paging & reset the content size
    myScrollView.pagingEnabled = YES;
    scrollView.contentSize = CGSizeMake(self.view.frame.size.width * NUM_VIEWS, self.view.frame.size.height);  //without this line, can no longer page through scrollview after zooming
    }
} 


@end

И это .h:

@interface MainViewController_iPhone : MainViewController <UIScrollViewDelegate> {  
    IBOutlet UIScrollView *scrollView;          //The main ScrollView that scrolls between pages of different images to search
    UIView *loadedNibView;                      //The UIView that we load from it's corresponding nib (i.e. IMG1_iPhone.xib)
    int currentPage;
}

//methods
-(void) loadNibs;
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)myScrollView;
- (void)scrollViewWillBeginZooming:(UIScrollView *)myScrollView withView:(UIView *)view;
- (void)scrollViewDidEndZooming:(UIScrollView *)myScrollView withView:(UIView *)view atScale:(float)scale;
- (void)scrollViewDidZoom:(UIScrollView *)myScrollView;
- (void)scrollViewDidScroll:(UIScrollView *)myScrollView;

//properties
@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIView *loadedNibView;

@end

Любые идеи / советы будут с благодарностью ... Спасибо!

1 Ответ

0 голосов
/ 09 марта 2011

Хорошо, я понял, в чем заключается моя проблема.

Я понял, что когда я увеличивал масштаб на первом изображении, это давало мне странное поведение с фоном прокрутки, растущим при масштабировании, но еслиЯ увеличил изображение на втором изображении - никакого странного поведения.Поэтому я начал задаваться вопросом, в чем разница между двумя изображениями ... и понял, что это должны быть теги.В цикле for, где я загружаю представления и устанавливаю их теги, я устанавливал первый на ноль и увеличивал оттуда.Упс - вроде как забыл, что есть множество других видов и объектов, у которых тег по умолчанию равен нулю!Поэтому позже, когда он запросил представление с тегом 0 - он возвращал какой-то другой вид, и вместо моего изображения его размер был изменен.

Исправлено:

#define ZOOM_TAG 1000

...


for (int i = 0; i < NUM_VIEWS; i++) {
    loadedNibView = [self getNibView:i];
    //loadedNibView.tag = i
    loadedNibView.tag = i + ZOOM_TAG;  //used later to retrieve view for current page
    [scrollView addSubview:loadedNibView];
}

...

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)myScrollView {

    //return [myScrollView viewWithTag:(currentPage)];
    return [myScrollView viewWithTag:(currentPage + ZOOM_TAG)];

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