2012-06-27 2 views
0

Я хотел был бы анимировать при изменении размера NSSplitView programatically. Вот код для изменения размера вида в SplitViewКак анимировать NSSplitView при изменении размера?

В awakeFromNib: И соблюдая NSSplitViewWillResizeSubviewsNotification

[[NSNotificationCenter defaultCenter] addObserver:self 
      selector:@selector(splitViewWillResizeSubviewsHandler:) 
      name:NSSplitViewWillResizeSubviewsNotification 
      object:splitView]; 

SplitView Изменение размера

NSView * leftSubView = [[splitView subviews] objectAtIndex:0];  
if ([leftSubView isHidden]) 
{ 
    [leftSubView setHidden:NO]; 
    [splitView setPosition:0 ofDividerAtIndex:0]; 
} 
else 
{ 
    [leftSubView setHidden:YES]; 
} 
[splitView adjustSubviews]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:NSSplitViewWillResizeSubviewsNotification object:self userInfo:nil]; 

Я могу изменить размер splitView.Where я должен добавить AnimationCode. (Поскольку rightView перемещается для замены leftSubView, я хочу, чтобы изменение размера происходило с некоторой задержкой)?

У меня есть прямоугольники двух представлений до и после изменения размера. Где мне писать код анимации.

+0

Пожалуйста, добавьте немного больше информации/код. Трудно понять, где вы застряли. что ты уже испробовал? – fzwo

ответ

1

Iam способен решать анимацию. Следующий код работает для меня

-(IBAction)resizeViews:(id)sender 
    { 
     NSSplitView *splitView = [self splitView]; 
     NSView * leftSubView = [[splitView subviews] objectAtIndex:0]; 
     NSView * rightSubView = [[splitView subviews] objectAtIndex:1]; 
     NSLog(@"splitView Frame %@",NSStringFromRect(splitView.frame)); 
     NSLog(@"left Frame %@",NSStringFromRect(leftSubView.frame)); 
     NSLog(@"right Frame %@",NSStringFromRect(rightSubView.frame)); 

     self.lastLeftViewWidth = leftSubView.frame.size.width; 

     NSMutableDictionary *collapseMainAnimationDict = [NSMutableDictionary dictionaryWithCapacity:2]; 
     [collapseMainAnimationDict setObject:rightSubView forKey:NSViewAnimationTargetKey]; 
     NSRect newRightSubViewFrame = rightSubView.frame; 
     newRightSubViewFrame.size.width = splitView.frame.size.width; 
     [collapseMainAnimationDict setObject:[NSValue valueWithRect:newRightSubViewFrame] forKey:NSViewAnimationEndFrameKey]; 

     NSMutableDictionary *collapseInspectorAnimationDict = [NSMutableDictionary dictionaryWithCapacity:2]; 
     [collapseInspectorAnimationDict setObject:leftSubView forKey:NSViewAnimationTargetKey]; 
     NSRect newLeftSubViewFrame = leftSubView.frame; 
     newLeftSubViewFrame.size.width = 0.0f; 
     newLeftSubViewFrame.origin.x = splitView.frame.size.width; 
     [collapseInspectorAnimationDict setObject:[NSValue valueWithRect:newLeftSubViewFrame] forKey:NSViewAnimationEndFrameKey]; 

     NSViewAnimation *collapseAnimation = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:collapseMainAnimationDict, collapseInspectorAnimationDict, nil]]; 
     [collapseAnimation setDuration:0.60f]; 
     [collapseAnimation startAnimation]; 
     [splitView adjustSubviews]; 
     [splitView setNeedsDisplay:YES]; 
    } 

-(IBAction)normalizeViews:(id)sender 
{ 
    NSView * left = [[self.splitView subviews] objectAtIndex:0]; 
    NSView * right = [[self.splitView subviews] objectAtIndex:1]; 
    NSLog(@"splitView Frame %@",NSStringFromRect(self.splitView.frame)); 
    NSLog(@"left Frame %@",NSStringFromRect(left.frame)); 
    NSLog(@"right Frame %@",NSStringFromRect(right.frame)); 
// [right setFrame: NSMakeRect(0, right.frame.origin.y, right.frame.size.width-118, right.frame.size.height)]; 
// [left setFrame:NSMakeRect(0, 0, 118, left.frame.size.height)]; 

    left.hidden = NO; 

    NSMutableDictionary *expandMainAnimationDict = [NSMutableDictionary dictionaryWithCapacity:2]; 
    [expandMainAnimationDict setObject:right forKey:NSViewAnimationTargetKey]; 
    NSRect newMainFrame = right.frame; 
    newMainFrame.size.width = self.splitView.frame.size.width-self.lastLeftViewWidth; 
    [expandMainAnimationDict setObject:[NSValue valueWithRect:newMainFrame] forKey:NSViewAnimationEndFrameKey]; 

    NSMutableDictionary *expandInspectorAnimationDict = [NSMutableDictionary dictionaryWithCapacity:2]; 
    [expandInspectorAnimationDict setObject:left forKey:NSViewAnimationTargetKey]; 
    NSRect newInspectorFrame = left.frame; 
    newInspectorFrame.size.width = self.lastLeftViewWidth; 
    newInspectorFrame.origin.x = self.splitView.frame.size.width-self.lastLeftViewWidth; 
    [expandInspectorAnimationDict setObject:[NSValue valueWithRect:newInspectorFrame] forKey:NSViewAnimationEndFrameKey]; 

    NSViewAnimation *expandAnimation = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:expandMainAnimationDict, expandInspectorAnimationDict, nil]]; 
    [expandAnimation setDuration:0.60f]; 
    [expandAnimation startAnimation]; 
    [self.splitView adjustSubviews]; 
    [self.splitView setNeedsDisplay:YES]; 
} 

После Link помог мне в решении вопроса

How to expand and collapse NSSplitView subviews with animation?

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

  • Нет связанных вопросов^_^