Анимированное вращение содержимого NSView - PullRequest
2 голосов
/ 02 сентября 2011

Я пытаюсь повернуть содержимое NSView (NSButton) на месте (т.е. из центра. Я хочу преобразовать - в |). Это можно сделать с помощью setFrameCenterRotation: ... Однако я пытаюсь оживить это, и

[[myview animator] setFrameCenterRotation: 90];

заставляет элемент управления сначала перейти вправо, а затем повернуть вокруг левого нижнего угла (0,0) назад к исходному положению.

Некоторые люди предложили сначала установить anchorPoint:

[[myview layer] setAnchorPoint: NSMakePoint(0.5, 0.5)];

но по какой-то причине анимация отменяет это, и она сбрасывается до (0, 0).

Итак, кто-нибудь выяснил, как анимировать вращение на месте NSView?

1 Ответ

0 голосов
/ 03 января 2012

Этого не произойдет, если вы добавите элемент управления из конструктора интерфейса и поверните его с помощью IBOutlet. Вам не нужно будет использовать метод "setAnchorPoint:"; "setFrameCenterRotation:" сам метод будет работать. Однако то же самое случилось со мной, когда я попытался повернуть NSButton, который есть в моем NSCell, как подпредставление. Решение состояло в том, чтобы иметь NSView в качестве подпредставления в controlView (см. Подкласс NSCell ниже), а NSButton I требует вращения в качестве подпредставления этого нового NSView.

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{

    if (![btnCheckBackView superview]) {
        //btnCheckBackView is my NSView holding the NSButton "btnCheck"
        [btnCheckBackView setFrame:NSRectFromCGRect(CGRectMake(9, cellFrame.origin.y+8, 28, 28))];
        [controlView addSubview:btnCheckBackView];
        if (![btnCheck superview]) {
            [btnCheck setFrame:NSRectFromCGRect(CGRectMake(0, 0, 28, 28))];
            [btnCheckBackView addSubview:btnCheck];

        }
    }




//    NSLog(@"drawWithFrame"); 
//    NSLog(@"Rect %d,%d,%d,%d",(int)cellFrame.origin.x,(int)cellFrame.origin.y,(int)cellFrame.size.width,(int)cellFrame.size.height);
//    NSLog(@"controlView %d,%d,%d,%d",(int)controlView.frame.origin.x,(int)controlView.frame.origin.y,(int)controlView.frame.size.width,(int)controlView.frame.size.height);


}
...