Animasyonla NSTableView scrollRowToVisible

NSTableView'ın üstüne ve NSTableView'ın altına kaydırmak için bir eylem uygulamaya çalışıyorum. scrollRowToVisible kullanıyorum, ancak animasyonlu eylemi çok seviyorum. Bunu yapmanın bir yolu var mı?

7

4 cevap

NSTableView, doğrudan kaydırma özelliğine sahip bir kaydırma özelliğine sahip olmasa da, NSTableView'ın yaşadığı NSClipView öğesinin kaydırma işlemini biraz matematikle yapabilirsiniz.

Mümkünse, görüntünün merkezine kaydırılmak üzere rowIndex satırını düzgün bir şekilde canlandırmak için bunu (NSTableView özel bir alt sınıfında) yaptım:

        NSRect rowRect = [self rectOfRow:rowIndex];
        NSRect viewRect = [[self superview] frame];
        NSPoint scrollOrigin = rowRect.origin;
        scrollOrigin.y = scrollOrigin.y + (rowRect.size.height - viewRect.size.height)/2;
        if (scrollOrigin.y < 0) scrollOrigin.y = 0;
        [[[self superview] animator] setBoundsOrigin:scrollOrigin];
22
katma
En azından Aslan üzerindeki Core Animation ve Core Image filtreleriyle birleştirildiğinde, bozuk görünüyor. Bir hareket bulanık kaydırma NSTableView yapmaya çalışıyorum ve birden fazla ekran uzağa kaydırırken içerik boyanmıyor.
katma yazar Ivan Vučica, kaynak
Başar, bunu deneyeceğim!
katma yazar keegan3d, kaynak
Bu harika çalıştı! İşte ortaya koyduğum son yöntem, aynı fikir ama biraz farklı. Ayrıca Lion'daki kaydırma çubuklarını da yanıp söner: gist.github.com/1558664
katma yazar keegan3d, kaynak
NSTableView'ımın sonuna kadar TÜMÜĞÜ yolunda ilerleyen tek kod budur. Tek uyarı, NSDrawNinePartImage (distorsiyon ve görüntü hataları) ile iyi çalışmadığıdır. NSImageViews ile kendi dokuz parçalı görüntü metodumu yeniden keşfettim ve kusursuz çalışıyor!
katma yazar rocky, kaynak
Burada aynı sorun. Tablo boş çıkıyor ve sonra hedef satırın yakınına doğru satırları görüyorum. Kaydırma işlemi sırasında düzenli bir tablo görünümüne benzemekte ve geri dönüşüm için görünümlerin dışında kalmaktadır.
katma yazar martinjbaker, kaynak

10.8+ hedefliyorsanız ve tablonuzun görünümü katman destekliyse bunu yapabilirsiniz:

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
    context.allowsImplicitAnimation = YES;
    [self.tableView scrollRowToVisible:someRow];
} completionHandler:NULL];
12
katma
ÇALIŞIYOR bir cazibe gibi!
katma yazar paulmelnikow, kaynak

Kolay bir yol yoktur, ancak NSAnimation'ı alt sınıflara ayırarak yaklaşırdım ve 0,0'dan 1,0'a ilerledikçe, ofsetinizi almak için toplam kaydırma mesafesiyle çarpın ve scrollToPoint'i sırayla arayın: pürüzsüz bir kaydırma eyleminin görünümünü vermek için. Teoride çalışmalı, ancak scrollview'in ne kadar iyi işbirliği yapacağından emin değilim.

2
katma
NSTableView için kendi özel kaydırma mekanizmamı uygulamaya başladığımda, setBoundsOrigin: saniyede 60 kez çağrılması aslında oldukça şaşırtıcı sonuçlar veriyor. Doğru yönde bahşiş için teşekkürler.
katma yazar sudo rm -rf, kaynak

Bu mümkün görünmüyor. NSTableView, 10.6'ya kadar herhangi bir animasyona destek vermedi. MasOSX10.7'den başlayarak, sınıfa eklenen bazı basit animasyonlar. Satırları yeni konumlara eklemek, kaldırmak ve taşımak için canlandırabilirsiniz. Bu kadar uzak.

2
katma