#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. Вы выяснили, как изменить размер подвида, который был увеличен?