Масштабирование во вложенных UIScrollViews - PullRequest
1 голос
/ 12 мая 2011

Это знакомая тема. Я создаю графический роман с помощью UIScrollview. План состоит в том, чтобы иметь возможность пролистывать роман с помощью uiscrollview верхнего уровня. Внутри этого есть ряд вложенных uiscrollview, в которые встроен uimageview. Идея состоит в том, что большие изображения можно панорамировать и увеличивать, но по-прежнему перемещать. У меня есть большая часть этой работы, но я не могу заставить работать зум. Я реализовал метод делегирования масштабирования, но безрезультатно, масштабирование просто перемещает изображение вокруг. Я подозреваю, что это что-то из-за встроенной природы вложенных прокрутки, но я не вижу, что мне не хватает. Я посмотрел пример Apple Scrollview Suite, но не смог найти ответ.

Это то, чем я занимаюсь до сих пор:

  - (void)viewDidLoad

{

[super viewDidLoad];


UIScrollView *scrollview = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];
scrollview.pagingEnabled = YES;
scrollview.scrollEnabled =YES;
scrollview.clipsToBounds = NO;
scrollview.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollview.showsHorizontalScrollIndicator = YES;
scrollview.backgroundColor = [UIColor blackColor];

NSInteger viewcount=4;
NSArray *images = [NSArray arrayWithObjects:[UIImage imageNamed:@"mars.png"],[UIImage imageNamed:@"mercury.png"],[UIImage imageNamed:@"neptune.png"],[UIImage imageNamed:@"venus.png"],nil];

for (int i = 0; i <viewcount; i++)
{
   CGFloat x = i * self.view.frame.size.width;

    subView = [[UIScrollView alloc]initWithFrame:CGRectMake(x, 0, self.view.frame.size.width, self.view.frame.size.height)];


    [subView setBackgroundColor:[UIColor blackColor]];
    [subView setCanCancelContentTouches:NO];
    subView.clipsToBounds = NO;    // default is NO, we want to restrict drawing within our scrollview
    subView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    aImageView = [[UIImageView alloc ] initWithImage:[images objectAtIndex:i]];
    [self.aImageView setTag:ZOOM_VIEW_TAG];
    [subView addSubview:aImageView];
    [subView setContentSize:CGSizeMake(aImageView.frame.size.width, subView.frame.size.height)];
    subView.minimumZoomScale = 1;
    subView.maximumZoomScale = 3;
    subView.delegate = self;
    [subView setScrollEnabled:YES];
     subView.contentSize = aImageView.frame.size;
    [scrollview addSubview:subView];
    [subView release];
}



[self.view addSubview:scrollview];

}



-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView {
NSLog (@"test");
UIView * view = nil;
view = [subView viewWithTag:ZOOM_VIEW_TAG];

return view;
}

1 Ответ

4 голосов
/ 12 мая 2011

Решил это для всех, кто пытается это сделать.

Одна вещь, которую я пропустил в приведенном выше посте, это довольно фундаментально !, в методе viewdidLoad чуть выше [self.view addSubview: scrollview];должно быть следующее, которое вычисляет ширину всех подпредставлений

 scrollview.contentSize = CGSizeMake(self.view.frame.size.width*viewcount,self.view.frame.size.height);

Код в - (UIView *) viewForZoomingInScrollView: (UIScrollView *) scrollView {метод должен быть:

return [scrollView.subviews objectAtIndex:0];  

Это позволяет вам масштабировать и перемещаться по изображениям, а также очень удобно перемещаться по наборам изображений.Пришло время разобраться, как автоматически вернуться к исходному размеру при переходе к следующему изображению, так как оно остается увеличенным при перемещении по странице.

...