2012-06-09 14 views
5

kullanarak bir NSWindow "Fold" Bu yüzden AppKit ve Cocoa (UIKit ile CocoaTouch gelen) oldukça yeni ve şu anda bir NSWindow katlamak için bir arayüz uyguluyor. IOS'ta bu oldukça kolay olurdu, ancak OS X için ne kadar küçük farklılıklar olduğunu sormayı tercih ediyorum.CoreAnimation

Aşağıdaki geçişi uygulamaya nasıl devam edersiniz?

Window Fold

Not: alt bar benim contentView parçası olup OS X sağlayan alt çubuğunu olduğunu. Yani pencerem (bu arada INAppStoreWindow) bir titleBar ve bir contentView'den oluşur.

İçeriği katlayabilirim ve pencereyi eşzamanlı olarak yeniden boyutlandırabilirim, ancak perspektif transfomasyonu nedeniyle gerçekleşen katlanırken saydamlığı koruyabilseydim tercih edilirdim. Yani içe doğru bükülen taraflar (geçiş sırasında) şeffaf olmalıdır. Yoksa bunu gözden geçiriyor muyum?

cevap

2

İlk başta kötü haber: UIKit'ten farklı olarak, AppKit denetimlerini oluşturmak için Çekirdek Animasyon kullanmaz. Tüm CALayers, NSView’un özel katman barındırma örneklerinde kendi dünyalarında yaşar. Pencerenizin içerik görünümü katman barındırması olmadıkça, pencerenizin içeriğine adil bir korsanlık derecesi olmadan bir CAAnimations uygulayamazsınız (tüm içerik görünümünü bir bitmap'e dönüştürmek mümkün olabilir, Bunu bir katmanın içeriği olarak ayarlayın ve bunun üzerinde dönüşümü gerçekleştirin. Emin değilim).

İçindekiler için içerik görünümünüz Core Animation tabanlı. Eğer öyleyse, açıkladığınız yaklaşım çalışmalıdır. Ayrıca, katmanı saydam kenarlıksız bir NSWindow içinde barındırabilmelisiniz ve ardından içerik görünümüne yaptığınız tüm dönüşümler, arkasındaki masaüstünü ortaya çıkaracaktır. Burada istediğinizi yapması gereken bir parça (Matt Long'dan):

- (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

Evet, içerik görünümüm CoreAnimation tabanlı ve bu tuzağın farkındayım. NSBorderlessWindowMask ile ilgili sorun, arka plan rengini clearColor olarak ayarlarsam, sistemin bir pencere gölgesi çizmesidir. Tabii ki devam edebilirim ve kendi başıma işleyebilirdim, ama temelde kendi penceremi tamamen çizmekti. OS X'in sonraki sürümlerinde arabirimin potansiyel değişikliği nedeniyle bunu önlemek istiyorum. – pkluz

+0

Pencere gölgesindeki sorununuz standart denetimlere sahip olanla hemen hemen aynı. AppKit, çekirdek animasyon tarafından oluşturulmuyor, bu nedenle oluşturduğunuz her şey ile temel animasyonu kullanamazsınız. Onsuz yap, ya da kendini yeniden yarat. Berbat, biliyorum. Sanırım daha eski bir api üzerinde çalışan bagajın bir parçası ... –