перемещение UIScrollView на поворот на Ipad - PullRequest
0 голосов
/ 02 июня 2011

У меня есть приложение с несколькими окнами, и я построил собственный контроллер PanelView для отображения панелей с ограниченной информацией о продукте, проблема в том, что должно быть 3 панели в портретном аспекте и 4 в горизонтальном.

Из-за глубины контроллеров представления (около 5) событие didRotateFromInterfaceOrientation: не будет запускаться на дочернем viewcontroller, поэтому я использую NSNotificationCenter на rootViewController, чтобы опубликовать сообщение и забрать его с помощью дочернего контроллера.

Я могу без проблем перемещать панели (UIScrollViews), но они перемещаются на место, когда я этого хочу, но они перемещаются мгновенно, что не плавно или аккуратно, я хочу, чтобы они скользили на свое новое место.

После некоторых поисков мне все еще не повезло узнать, как это сделать.

-(void) updatePanelLocations{
    int buttonWidth = 230;
    int buttonHeight = 335;
    float frameWidth = mainPanel.frame.size.width;
    int numberOfcolumns = frameWidth / buttonWidth;
    float margin = (frameWidth - (numberOfcolumns * buttonWidth)) / (numberOfcolumns +1);
    int currentRow = 0;
    int currentColumn = 0;

    CATransition *animation = [CATransition animation];
    [animation setDelegate:self];
    [animation setType:kCATransitionReveal];
    [animation setDuration:0.4];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];

    int i = 0;

    for (UIView* curView in [mainPanel subviews]) {
        //set an arbutrary tag field in generating the scrollviews so i can detect this
        if (curView.tag != 9991) continue;
        //newline detection
        if (currentColumn == numberOfcolumns){
            currentRow++;
            currentColumn = 0;
        }

        [[curView layer] addAnimation:animation forKey:@"transitionViewAnimation"]; 

        //XY Coordinates
        int buttonX = (margin * (currentColumn + 1)) + (buttonWidth * currentColumn);
        int buttonY = (margin * (currentRow + 1)) + (buttonHeight * currentRow);

        //make the frame
        [curView setFrame:CGRectMake(buttonX, buttonY, buttonWidth, buttonHeight)];        
        [curView setAutoresizingMask: UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin];
        //put the button on the target uiscrollview
        [[curView layer] removeAnimationForKey:@"transitionViewAnimation"];
        //next column
        currentColumn++;

        i++;
    }

    animation = nil;
}

Как можно оживить это движение для скольжения от а к б ??

Или, что еще лучше, если я все понял неправильно, укажи мне правильное направление:)

Приветствия

1 Ответ

1 голос
/ 02 июня 2011

То, что вы ищете, это UIView animateWithDuration: методы.

Вы получите соответствующую длительность от willRotateToInterfaceOrientation:duration: в контроллере вида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...