Масштабирование в scrollview ios6
Я пытаюсь реализовать простой ImageView в scrollview для отображения изображения. Я хочу особенно реализовать функцию масштабирования. Я реализовал следующий код (который взят из одного из примеров кодов Objective C на веб-сайтах Apple). Я тщательно протестировал масштабирование на ios 5, и, похоже, проблем нет. Однако, когда я перенес свой код на ios 6 и протестировал функцию масштабирования, через некоторое время я получаю следующее сообщение об ошибке, и мое приложение вылетает с искаженными результатами масштабирования.
Невозможно одновременно удовлетворить ограничения. Вероятно, по крайней мере одно из ограничений в следующем списке - это то, что вам не нужно. Попробуйте это: (1) посмотреть на каждое ограничение и попытаться выяснить, чего вы не ожидаете; (2) найдите код, который добавил нежелательное ограничение или ограничения, и исправьте его. (Примечание. Если вы видите непонятные NSAutoresizingMaskLayoutConstraints, обратитесь к документации для свойства UIView translatesAutoresizingMaskIntoConstraints)
NSAutoresizingMaskLayoutConstraint: 0x8808360 h = --- v = --- V: [UIWindow: 0x744db00 (480)], NSLayoutConstraint: 0x71286d0 UIView: 0x71222c0.bottom == UIWindow: 0x744db00.bot: 0x050: bt: -[UIView:0x71222c0] (Имена: '|':UIWindow:0x744db00), NSLayoutConstraint:0x7120c50 UIImageView:0x7451630.bottom == UIScrollView:0x71206f0.bottom, NSLayoutConstraint:0x7120c90 V:|-(0)-[UIImageView:0x7451630] (Имена: '|':UIScrollView:0x71206f0), NSLayoutConstraint:0x7120bd0 UIImageView:0x7451630.centerY == UIScrollView:0x71206f0.centerY, NSLayoutConstraint:0x7122a50 V:|- 0: 0: (0): (0): (0): (0): (0): (0): (0): (0): (0): (0): (0): (0): [10:UIView:0x71222c0), NSLayoutConstraint:0x7122940 V:[UIScrollView:0x71206f0]-(38)-| (Имена: '|':UIView:0x71222c0)
Попытка восстановить, нарушив ограничение
Сломайте objc_exception_throw, чтобы поймать это в отладчике. Методы в категории UIConstraintBasedLayoutDebugging в UIView, перечисленные в, также могут быть полезны.
Я попытался выполнить поиск Google для этой проблемы, но я не получаю хорошие результаты. Код, который я использую, выглядит следующим образом. Помощь высоко ценится
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// set the tag for the image view
[self.imageView setTag:ZOOM_VIEW_TAG];
// calculate minimum scale to perfectly fit image width, and begin at that scale
NSLog(@"[imageScrollView frame].size.width : %f",[self.scrollVIew frame].size.width);
NSLog(@"[imageView frame].size.width : %f",[self.imageView frame].size.width);
NSLog(@"[imageScrollView frame].size.height : %f",[self.scrollVIew frame].size.height);
NSLog(@"[imageView frame].size.height : %f",[self.imageView frame].size.height);
float minimumScale = [self.scrollVIew frame].size.width / [self.imageView frame].size.width;
minimumScale = 300.0/1200.0;
NSLog(@"minimumScale : %f",minimumScale);
[self.scrollVIew setMinimumZoomScale:minimumScale];
[self.scrollVIew setZoomScale:minimumScale];
NSLog(@"imageScrollView.zoomScale : %f",self.scrollVIew.zoomScale);
NSLog(@"imageScrollView.minimumZoomScale = minimumScale : %f",self.scrollVIew.minimumZoomScale = minimumScale);
self.scrollVIew.contentSize = CGSizeMake(1200.0, 800.0);
self.scrollVIew.delegate = self;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return [self.scrollVIew viewWithTag:ZOOM_VIEW_TAG];
}
Вивек
2 ответа
Вам нужно создать свой UIImageView
Программно, и добавить в подпредставление вашего UIScrollView
, Но вы должны сделать это внутри viewDidAppear.
Просто ваш UIScrollView может быть сделан в StoryBoard!
И вы установите scrollView.contentSize
Внутри "viewDidAppear:(BOOL)animated
"а не внутри viewDidLoad.
Отключите автоматическую разметку в вашем файле XIB. Он будет находиться под самой левой вкладкой в разделе свойств справа. Вы, вероятно, используете это, не зная об этом. Если вы используете его намеренно, попробуйте разобраться в своих ограничениях, чтобы они не конфликтовали друг с другом.