2012-05-30 2 views
1

У меня есть UIView, который я хочу автоматически увеличить, чтобы быть размером экрана, когда пользователь нажимает на него.Почему мое изображение поворачивается на 90 градусов до его масштабирования?

Я взял код из http://cocoawithlove.com/2010/09/zoomingviewcontroller-to-animate-uiview.html

и зумирование работает, за исключением непосредственно перед началом масштабирования вида поворачивается на 90 градусов. Почему это происходит?

(мнение находится в карусели. Перед пользователю постукивания вида, устройство вращаются в ландшафт, в этот момент контроллера представления для карусели в стек навигации и отображаемой карусель.)

код:

- (void)buttonTapped:(UIButton *) sender 
{ 
    NSInteger index = [self.carousel indexOfItemView:sender]; 

    UIView *currentView = [self.carousel itemViewAtIndex: index]; 
    UIView *proxyView = [[UIView alloc] initWithFrame:currentView.frame]; 
    proxyView.hidden = YES; 
    proxyView.autoresizingMask = currentView.autoresizingMask; 
    [currentView.superview addSubview: proxyView]; 

    CGRect frame = [currentView.window convertRect:currentView.frame fromView:proxyView.superview]; 
    [currentView.window addSubview:currentView]; 
    currentView.frame = frame; 

    [UIView 
    animateWithDuration:2.4 
    animations:^{ 
     currentView.frame = currentView.window.bounds; 
    }]; 

(карусельного является UIView, производный объект, от https://github.com/nicklockwood/iCarousel)

Благодаря

ответ

0

Я подозреваю, что проблема либо:

currentView.frame = frame; 

или:

currentView.frame = currentView.window.bounds; 

В ландшафтном режиме, на ваш взгляд, или одним из вмещающих взглядов имеет преобразование, которое вращает все, на 90 °. В качестве UIView docs indicate свойство frame не определено, если свойство transform вида представляет собой нечто иное, чем преобразование идентичности. Возможно, установка frame вашего вида неявно устанавливает transform обратно на личность, что приводит к ее возврату в портретную ориентацию.

Документы на связанный выше предупреждают против изменения frame, когда есть преобразование, и обеспечить решение:

Изменение этого свойство может быть анимированным. Однако, если свойство transform содержит не идентичное преобразование, значение свойства frame не определено и его не следует изменять. В этом случае вы можете переместить представление с использованием свойства центра и отрегулировать размер , используя свойство bounds.

+0

Если я прокомментирую первую строку, вид переместится в нижний левый угол (он был в центре), а затем вращается. Если я прокомментирую вторую строчку, она останется центрированной, но по-прежнему вращается (но не масштабируется, конечно). – Gruntcakes

+0

@ ChrisP.Bacon Решение, как объясняется в документах, заключается в том, чтобы анимировать 'bounds' и' center' вместо 'frame', если есть не-идентичное преобразование. – Caleb

+0

Вращение происходит перед анимией, поэтому, если я полностью закомментирую код анимации, поворот все еще происходит. – Gruntcakes

Смежные вопросы