2012-06-09 12 views
5

私はAppKitとCocoa(CocoaTouchのUIKitから来ている)がかなり新しく、現在NSWindowを折りたたむためのインターフェースを実装しています。 iOSでは、これはかなり簡単ですが、OS Xとの大きな違いがどのようにあるのかを見て私は聞きました。CoreAnimationを使用してNSWindowを「折りたたむ」

次の移行の実装についてどう思いますか?

Window Fold

:下のバーは、私のcontentViewの一部ではなくOS Xが提供する下のバーがあります。私。私のウィンドウ(途中でINAppStoreWindow)は、titleBarとcontentViewで構成されています。

私はcontentViewを折り畳み、ウィンドウを同期的にサイズ変更することができたと思いますが、透視変換のために折りたたみ中に透明性を維持できれば好ましいでしょう。私。内側に曲がっている側は(移行中に)透明であるべきである。それとも私はこれを思っていますか?

答えて

2

Bad News first:AppKitはUIKitと異なり、Core Animationを使用してコントロールをレンダリングしません。すべてのCALayersはNSViewの特別なレイヤーホスティングインスタンス内で自分たちの世界に生息しています。したがって、ウィンドウのコンテンツビューがレイヤーホスティングでない限り、かなりの程度のハッキングなしにウィンドウ全体の内容にCAAnimationsを適用することはできません(コンテンツビュー全体をビットマップにレンダリングすることが可能であり、それをレイヤーのコンテンツとして設定し、そのレイヤーで変換を実行します。わかりません)。

あなたのコンテンツビューはコアアニメーションベースです。そうであれば、あなたが説明しているアプローチはうまくいくはずです。透明なボーダーレスNSWindowでレイヤーをホストできるようにする必要があります。次に、コンテンツビューに変換すると、その背後にあるデスクトップが表示されます。ここであなたが望むべきを行うには(マット・ロング)からの抜粋だ:

- (id) initWithContentRect: (NSRect) contentRect 
       styleMask: (unsigned int) aStyle 
        backing: (NSBackingStoreType) bufferingType 
        defer: (BOOL) flag 
{ 
    if (![super initWithContentRect: contentRect 
          styleMask: NSBorderlessWindowMask 
          backing: bufferingType 
         defer: flag]) return nil; 
    [self setBackgroundColor: [NSColor clearColor]]; 
    [self setOpaque:NO]; 

    return self; 
} 
+0

はい、私のコンテンツビューはCoreAnimationベースであり、私はその落とし穴を認識してんです。 NSBorderlessWindowMaskの問題は、背景色をclearColorに設定すると、システムはウィンドウの影を描画することになります。確かに私は自分自身をレンダリングしてレンダリングすることができますが、それは基本的に私自身のウィンドウ全体を描画するようなものです。私はOS Xのそれ以降のバージョンでは、インターフェイスの潜在的な変更のためにそれを避けるためにしたいと思います。 – pkluz

+0

あなたの問題は、ウィンドウの影とほぼ同じ標準のコントロールと同じです。 AppKitはコアアニメーションによってレンダリングされないため、コアアニメーションを使用することはできません。あなたはそれなしでやっていますか、それともあなた自身で再実装しています。それは吸う、私は知っている。私はそれが古いapiで働いて来る荷物の一部だと思います... –

関連する問題