Как я могу заставить функцию NSWindow setFrame: .. animated: YES] анимировать вниз, а не вверх? - PullRequest
4 голосов
/ 09 января 2011

Когда я вызываю мой [window setFrame: frame animated: YES], чтобы увеличить окно, оно прекрасно работает, но оно оживляет и уходит за строку состояния. Как сделать так, чтобы окно анимировалось вниз?

Ответы [ 2 ]

13 голосов
/ 09 января 2011

Просто уменьшите координату y на то же расстояние, на котором вы увеличиваете высоту.

CGFloat amountToIncreaseWidth = 100, amountToIncreaseHeight = 100;
NSRect oldFrame = [window frame];
oldFrame.size.width += amountToIncreaseWidth;
oldFrame.size.height += amountToIncreaseHeight;
oldFrame.origin.y -= amountToIncreaseHeight;
[window setFrame:oldFrame animated:YES];
3 голосов
/ 09 января 2011

Я не мог найти простой способ сделать это, поэтому я написал анимационную функцию, которая изменяла бы размер окна и одновременно перемещала его, создавая видимость его анимации вниз.

- (IBAction)startAnimations:(id)sender{

    NSViewAnimation *theAnim;
    NSRect firstViewFrame;
    NSRect newViewFrame;
    NSMutableDictionary* firstViewDict;

    {
        firstViewDict = [NSMutableDictionary dictionaryWithCapacity:3];
        firstViewFrame = [window frame];
        [firstViewDict setObject:window forKey:NSViewAnimationTargetKey];

        [firstViewDict setObject:[NSValue valueWithRect:firstViewFrame]
                          forKey:NSViewAnimationStartFrameKey];

        newViewFrame = firstViewFrame;

        newViewFrame.size.height += 100;
        newViewFrame.origin.y -= 100;

        [firstViewDict setObject:[NSValue valueWithRect:newViewFrame]
                          forKey:NSViewAnimationEndFrameKey];
    }

    theAnim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray
                                                               arrayWithObjects:firstViewDict, nil]];

    [theAnim setDuration:1.0]; 
    [theAnim startAnimation];

    [theAnim release];
}
...