animasyon bu şekilde oluşturulan saydam başka NSWindow
soru ... bende kenarlıksız pencere, ne zaman gölge titreyen ...NSWindow - kenarlıksız, şeffaf pencere - Pencere burada yüksekliğini
- (id)initWithView:(NSView *)view anchorPoint:(NSPoint)anchorPoint position:(NSPoint)position distance:(CGFloat)distance {
if (!view) {
return nil;
}
NSSize size = view.intrinsicContentSize;
NSRect contentRect = NSMakeRect(0, 0, size.width, size.height);
self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
if (!self) {
return nil;
}
_windowView = view;
_anchorPoint = anchorPoint;
_position = position;
_distance = distance;
[self setContentView:_windowView];
[self setExcludedFromWindowsMenu:YES];
[self setMovableByWindowBackground:NO];
[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]];
[self setHasShadow:YES];
[self useOptimizedDrawing:YES];
[self setReleasedWhenClosed:NO];
[self setFrame:[self windowRectWithSize:contentRect.size] display:YES];
[self setAnchorAttribute:NSLayoutAttributeTop forOrientation:NSLayoutConstraintOrientationVertical];
[self setAnchorAttribute:NSLayoutAttributeCenterX forOrientation:NSLayoutConstraintOrientationHorizontal];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(viewFrameDidChange:)
name:NSViewFrameDidChangeNotification
object:nil];
return self;
}
.. . ve viewFrameDidChange:
bu doğru NSWindow
gölge sahip tek yoludur ...
- (void)viewFrameDidChange:(NSNotification *)note {
if (note.object != self.contentView) {
return;
}
[self display];
[self setHasShadow:NO];
[self setHasShadow:YES];
}
... olarak tanımlanmaktadır. pencere boyutu değişir, ben display
, setHasShadow:NO
ve aksi pencere gölge sakat setHasShadow:YES
aramak zorunda olduğunda Başka bir deyişle, - bu bütün pencerenin yanında olmadığına - Pencerenin sadece bir parçası, vb
Bu işin ben başlıyor kadar animasyonlu yükseklik. Yükseklik hareketliyse, gölge doğru şekilde yeniden hesaplanır ve görüntülenir, ancak tüm pencere & gölgesi titriyor ve oldukça çirkin.
Gölge fikri neden titriyor? display
, setHasShadow:NO/YES
'u [self invalidateShadow]
ile değiştirmeyi denedim, ancak hiç çalışmıyor ve gölge yanlış bir şekilde görüntüleniyor.
Titremeyi önlemek için pencere kenarlığını gölgesiz kenarlıksız/saydam pencerede nasıl animasyonlu hale getirmelisiniz?
Titreşen gölgenin videosu. http://d.pr/v/lbkQ
Çevremde arama yaptım ve bu yanıtlanması çok zor bir soru gibi görünüyor. Apple ile bir Geliştirici Teknik Desteği yapmanızı öneririm (bir geliştirici olarak yılda 2 ücretsiz alırsınız). Eminim buradaki biri sizin için bu sorunu çözebilir. – sangony
Sorunu kontrollü bir ortamda çoğaltmaya çalıştım ancak başarısız oldu. Aynı tip şeffaf pencereyle (şeffaf kağıt klipsle) titrek olmayan gölgelerim olur. Yeniden boyutlandırma bildirimlerini bile devre dışı bıraktım. [İşte kod] (https://dl.dropboxusercontent.com/u/20258059/WindowShadows.zip). Belki de gölgenin kendisiyle hiçbir ilgisi yoktur, ancak iç görünüşün yeniden çizilmesiyle, sonuçta gölgeyi etkiler. Pencereye tıklayarak pencerenin yeniden boyutlandırılmasının yapıldığından bahsetmeliyim. – aLevelOfIndirection