2011-09-14 10 views
2

私は、空白のビュー(contentView)といくつかの任意のサブビュー(今はNSImageView)を含むMAAttachedWindow(サブクラスはNSWindow)です。 読み込み時に、アニメーションのように垂直方向に100ピクセルずつウィンドウのサイズを変更しようとしています。NSViewリサイズ不安定

このコードブロックは私のウィンドウとビューを初期化します

_popoverContentView = [[NSView alloc] initWithFrame: aFrame]; 
NSImageView *img = [[NSImageView alloc] initWithFrame: aFrame]; 
[img setImage: [NSImage imageName: "@my_debug_image"]]; 
[img setAutoresizingMask: NSViewHeighSizable]; 
[_popoverContentView setAutoresizesSubviews: YES]; 
[_popoverContentView addSubview: img]; 
popover = [[MAAttachedWindow alloc] initWithView: _popoverContentView attachedToPoint: aPoint inWindow: nil onSide: MAPositionBottom atDistance: aDist]; 

そして、このコードブロックは、アニメーションを担当します。今、このすべての作品(ほとんど)に示すしかしとして、期待どおり

NSRect newPopoverFrame = popover.frame; 
NSRect newPopoverContentViewFrame = _popoverContentView.frame; 

newPopoverFrame.size.height += 100; 
newPopoverContentViewFrame.size.height += 100; 

[_popoverContentView animator] setFrame: newPopoverContentViewFrame]; 
[[popover animator] setFrame: newPopoverFrame display: YES animate: YES]; 

this videoでは、アニメーションは信頼できず、不安定で、不安定です。私のコードで何が原因であるのかを突き止めることができないか、またはイメージビューを所定の場所にロックする方法を見つけることができません。

答えて

1

私はこの問題は、あなたも古いNSViewAnimation APIを使用していますNSWindowsetFrame:display:animate:、はるかに古いanimate:パラメータを使用している間、ウィンドウの枠をアニメーション化する新しい(っぽい)アニメーターのプロキシを使用していることだと思います。

これらの2つのアニメーション方法は、異なるコードパスを使用して同時にウィンドウをアニメーション化しようとするので、おそらく競合しています。

また、あなたが同時であることをアニメーションを希望する場合[NSAnimationContext beginGrouping][NSAnimationContext endGrouping]でアニメータープロキシへの複数の呼び出しをラップする必要があります。

[NSAnimationContext beginGrouping]; 
[_popoverContentView animator] setFrame: newPopoverContentViewFrame]; 
[[popover animator] setFrame: newPopoverFrame display: YES animate:NO]; 
[NSAnimationContext endGrouping]; 

問題が解決しない場合は、問題のあるsetFrame:display:animate:方法の使用をドロップすると、ちょうど独立して位置やサイズをアニメーション化できます:

[NSAnimationContext beginGrouping]; 
[_popoverContentView animator] setFrame: newPopoverContentViewFrame]; 
[[popover animator] setFrameOrigin: newPopoverFrame.origin]; 
[[popover animator] setFrameSize: newPopoverFrame.size]; 
[NSAnimationContext endGrouping]; 

アニメーション

はこれをやって試してみてくださいコンテキストグループ化により、すべてが同時に発生することが保証されます。

+0

*私の問題は、部分的には、ばねとスプロケット、部分的には私が間違っていた計算の混乱を招いてしまった。しかし、私が与えた情報については、これはまさに正しいことです。ありがとう! –

関連する問題