Почему этот UIImageView самоцентрируется? - PullRequest
1 голос
/ 13 марта 2011

У меня есть UIImageView в UIScrollView в другом UIScrollView (на основе примера кода Apple PhotoScroller ).Когда UIScrollView обращается к своему контроллеру для отмены самого себя, он вызывает этот метод:

- (void)dismiss {
    [scrollView removeFromSuperview];
    ImageScrollView *isv = [self currentImageScrollView];
    UIImage *image = isv.imageView;
    image.frame = [self.view convertRect:image.frame fromView:isv];

    [self.view insertSubview:image belowSubview:captionView];
    [(NSObject *)delegate performSelector:@selector(scrollViewDidClose:)
                               withObject:self
                               afterDelay:2.0];
}

Теперь вот странная часть: представление изображения переходит на другую позицию сразу после выполнения этого метода, но до scollViewDidClose метод вызывается на делегате.Если изображение больше, чем его новый супер-вид, оно переходит так, что его левый край выравнивается по левому краю его супер-вида.Если он меньше, чем его новый супер вид, он переходит в самый центр вида.В этом изменении нет анимации.

Итак, мой вопрос: как мне предотвратить это?Я настроил как класс super view (self.view), так и класс view image, чтобы увидеть, какие методы могут быть вызваны.Ни кадр, ни центр не устанавливаются в представлении изображения после вызова этого метода, и в то время как метод layoutSubviews вызывается в суперпросмотре, то есть , а не , что перебрасывает изображение в центр или влевосторона суперпредставления.Я также попытался отключить autoResizesSubviews в режиме суперпредставления и установить autoresizingMask вида изображения на UIViewAutoresizingNone без изменений в поведении.

Так, где это происходит и почему?И что еще более важно, как я могу остановить это?

Я бился над этим в течение нескольких дней.Любые указатели или указания будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 13 марта 2011

ImageScrollView - это то, что центрирует ваш UIImageView. Установите точку останова в ImageScrollView layoutSubviews, и вы увидите, как центрируется ваш UIImageView.

Вы берете ImageScrollView внутренний imageView и помещаете его в другое представление. Это не сработает, потому что ImageScrollView по-прежнему сохраняет право собственности на этот экземпляр UIImageView и все еще управляет его макетом.

Вам нужно будет либо скопировать изображение в другой экземпляр UIImageView, либо изменить ImageScrollView, чтобы позволить ему отказаться от владения imageView.

1 голос
/ 13 марта 2011

Вы не настраиваете рамку представления «изображение», когда вставляете его как подпредставление. Возможно, вы захотите сделать это явно, если хотите, чтобы представление отображалось в определенной позиции в представлении прокрутки.

...