Масштабирование с помощью UIScrollView с использованием строго среды автозапуска не работает.
Это особенно неприятно, потому что примечания к выпуску iOS 6, безусловно, заставляют меня думать, что это должно произойти, когда написано о "Pure Auto Layout" здесь http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html
Я посмотрел слайды WWDC 2012 для сессий 202, 228 и 232 и не видел ответа для этого.
Единственный вопрос, который я видел в Интернете специально для этой проблемы, - это масштабирование UIScrollView с автоматической компоновкой, но оно не дает кода проблемы и там нет ответа.
Этот пользователь https://stackoverflow.com/users/341994/matt дал много замечательных ответов на вопросы автозапуска UIScrollView и даже связался с кодом на узле git, но я не смог найти что-нибудь, что ответит на этот вопрос.
Я попытался довести этот вопрос до абсолютного минимума, чтобы он дал понять.
Я создал новое одноразовое приложение с раскадрой и не вносил изменений в конструктор интерфейса.
Я добавил большой файл изображения в проект "pic.jpg".
SVFViewController.h
#import <UIKit/UIKit.h>
@interface SVFViewController : UIViewController <UIScrollViewDelegate>
@property (nonatomic) UIImageView *imageViewPointer;
@end
SVFViewController.m
#import "SVFViewController.h"
@interface SVFViewController ()
@end
@implementation SVFViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIScrollView *scrollView = [[UIScrollView alloc] init];
UIImageView *imageView = [[UIImageView alloc] init];
[imageView setImage:[UIImage imageNamed:@"pic.jpg"]];
[self.view addSubview:scrollView];
[scrollView addSubview:imageView];
scrollView.translatesAutoresizingMaskIntoConstraints = NO;
imageView.translatesAutoresizingMaskIntoConstraints = NO;
self.imageViewPointer = imageView;
scrollView.maximumZoomScale = 2;
scrollView.minimumZoomScale = .5;
scrollView.delegate = self;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(scrollView,imageView);
NSLog(@"Current views dictionary: %@", viewsDictionary);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics: 0 views:viewsDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]|" options:0 metrics: 0 views:viewsDictionary]];
}
-(UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return self.imageViewPointer;
}
@end
Обратите внимание, что я приложил все усилия, чтобы сделать это так же, как пример кода, приведенный в примечаниях к выпуску iOS 6, просто делая минимальный минимум для масштабирования.
Итак, проблема?
Когда вы запускаете это приложение и перемещаетесь в режиме прокрутки, все хорошо. Но при масштабировании проблема очевидна, изображение мерцает взад-вперед, и размещение изображения в пределах прокрутки становится более ошибочным с каждым увеличением.
Похоже, идет битва за смещение содержимого imageView, кажется, что с каждым "зумом" он устанавливает разные значения двумя разными вещами. (NSLog свойства смещения содержимого изображенияViewView подтверждает это).
Что я здесь делаю неправильно? Кто-нибудь знает, как реализовать масштабирование свойств в UIScrollView в чисто среде автозапуска. Есть ли пример этого где-нибудь там?
Пожалуйста, помогите.