Масштабирование в 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. Он будет находиться под самой левой вкладкой в ​​разделе свойств справа. Вы, вероятно, используете это, не зная об этом. Если вы используете его намеренно, попробуйте разобраться в своих ограничениях, чтобы они не конфликтовали друг с другом.

Другие вопросы по тегам