Bir kullanıcı belirli bir alanın üzerine geldiğinde, yeni görünümde çekmece benzeri bir animasyon göründüğü bir özelliği uygulamak istiyorum. Ayrıca, kullanıcı belirli bir alanı terk ettiğinde, çekmece animasyonla gitmelidir. Bu, Dock'un göründüğü ve animasyonla birlikte kaybolduğu OS X'deki ekranın alt kısmına geldiğinizde gördüğünüz şeydir. Ben animasyon ile özelliğini uygulamak eğer mouseExited:
animasyon tamamlandığında önce belirli bir alan yeniden girdiğinizdeNSTrackingArea'nın faresi nasıl uygulanırEntered/Animasyon ile çıkıldı?
Ancak, düzgün çalışmıyor. İşte benim kod: Bu kodu
let trackingArea = NSTrackingArea(rect: CGRectMake(0, 0, 120, 300), options: NSTrackingAreaOptions.ActiveAlways | NSTrackingAreaOptions.MouseEnteredAndExited, owner: self, userInfo: nil)
underView.addTrackingArea(trackingArea) // underView is the dummy view just to respond to the mouse tracking, since the drawerView's frame is changed during the animation; not sure if this is the clean way...
override func mouseEntered(theEvent: NSEvent) {
let frameAfterVisible = CGRectMake(0, 0, 120, 300)
NSAnimationContext.runAnimationGroup({
(context: NSAnimationContext!) in
context.duration = 0.6
self.drawerView.animator().frame = frameAfterVisible
}, completionHandler: {() -> Void in
})
}
override func mouseExited(theEvent: NSEvent) {
let frameAfterInvisible = CGRectMake(-120, 0, 120, 300)
NSAnimationContext.runAnimationGroup({
(context: NSAnimationContext!) in
context.duration = 0.6
self.drawerView.animator().frame = frameAfterInvisible
}, completionHandler: {() -> Void in
})
}
// drawerView's frame upon launch is (-120, 0, 120, 300), since it is not visible at first
, ben onun x
pozisyonunu değiştirerek drawerView
animasyon. Ancak, belirttiğim gibi, izleme alanına girdiğinizde ve izleme bölgesini terkettiğinizde, çekmece düzgün çalışıyor. Ancak, ayrılma animasyonu tamamen tamamlanmadan önce izleme alanına yeniden girerseniz durum böyle değildir.
Elbette animasyon süresini 0.1
gibi daha kısa olarak ayarlarsam bu nadiren olur. Ama manzarayı animasyonla taşımak istiyorum.
Ne yapmak istediğiniz görünüm kaybolan tamamlamadığı bile yine görünmesini drawerView
başlangıç yapmak olduğunu. Bunu yapmak için herhangi bir uygulama var mı?
Animasyon devam ederken yeniden girdiğinizde 'mouseEntered() işlevi çağrılıyor mu? Yani, çağrılmadığı veya yeni çerçevenin ayarının etkili olmadığı sorun mu? Her iki işlevde de, animasyon grubundan önce, animasyon grubunun sonundaki ve tamamlama işleyicisinde bir miktar veri kaydı koyun. –