Масштабирование внутри вложенных UIScrollViews

#iphone #objective-c #uiscrollview #uiscrollviewdelegate

#iPhone #objective-c #uiscrollview #uiscrollviewdelegate

Вопрос:

Знакомая тема: я создаю графический роман с использованием UIScrollView. План состоит в том, чтобы иметь возможность просматривать страницы по роману с помощью uiscrollview верхнего уровня. Внутри этого находится серия вложенных uiscrollviews, в каждый из которых встроен uimageview. Идея в том, что большие изображения можно перемещать и увеличивать, но при этом постранично просматривать. У меня большая часть этого работает, но я не могу заставить масштаб работать. Я реализовал метод делегирования масштабирования, но безрезультатно, масштабирование просто перемещает изображение по кругу. Я подозреваю, что это связано со встроенной природой вложенных scrollviews, но я не могу понять, чего мне не хватает. Я просмотрел пример 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. Не могу проверить прямо сейчас, но посмотрим, разрешено ли userInteractionEnabled по умолчанию для YES для UIScrollView. Я помню, что добавлял подвиды точно так же, как и вы, потому что я хотел добиться того же. Также проверьте другие флаги, которые могут помешать событию касания.

Ответ №1:

Разобрался с этим, для всех, кто еще пытается это сделать.

Одна вещь, которую я пропустил, строка кода в сообщении выше, которая является довольно фундаментальной!, в методе 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];  
  

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

Комментарии:

1. Вы выяснили, как изменить размер подвида, который был увеличен?