2010-11-19 29 views
3

Temel Animasyon kullanımı dışında, ızgara stili görünümü oluşturmaya çalışıyorum (NSCollectionView benzeri). Oldukça uzağım ve yapacak en önemli şey kaydırma yapmaktır. CALayer ile NSScrollView Kullanma

bugüne kadar benim kurulum

Bir NSView alt sınıfı (katman destekli) olması ve başlatma üzerine yarattığı ve ana görünümü tabakasının bir alt tabakanın olarak ızgara katmanı ekler. Alt görünümlerini ızgara benzeri bir oluşumda düzenleyen ızgara katmanı için özel bir CALayoutManager oluşturdum. Beklendiği gibi, alt tabakaları ızgara katmanına eklediğimde, düzen yöneticisi çağrılır ve katmanlar otomatik olarak konumlandırılır. Bu noktaya kadar, her şey gerektiği gibi çalışıyor.

Kaydırmayı uygulamak için özel görünümün bir üst öğesi olarak NSScrollView kullanmayı denediğimde sorun geliyor. Bunu şu şekilde ayarladım: Özel görünümümü, Arabirim Oluşturucu'da NSScrollView'un bir alt görünümü olarak oluşturdum. Ardından, düzen yöneticisi sınıfımda, delegate özelliğini ekledim ve başlatma sırasında, görünüm alt sınıfım kendisini düzen yöneticisinin temsilcisi olarak ayarlıyor. Mizanpaj yöneticisinin layoutSublayersForLayer: yönteminin sonunda, temsilci ile temsilci yöntemini layoutManager:contentHeightChanged:.

- (void)layoutManager:(MyLayoutManager*)manager contentHeightChanged:(CGFloat)height; 
{ 
    CGFloat newHeight = [[self enclosingScrollView] contentSize].height; 
    if (height > newHeight) { 
     newHeight = height; 
    } 
    NSRect newFrame = [self frame]; 
    newFrame.size.height = newHeight; 
    [self setFrame:newFrame]; 
} 

O, sadece yeni yükseklik kaydırma görünümünde içeriği boyutundan daha büyüktür ve birlikte görünümler çerçevesini ayarlar olup olmadığını görmek için oldukça basit denetler oluyor: İşte benim NSView alt sınıfta o yöntemin uygulanmasıdır yeni yükseklik.

Bu işler - belirli bir dereceye kadar. Görünüm yeniden boyutlandırıldığında, görüntünün çerçevesini, içeriğin tüm yüksekliğini kapsüllemek için gerektiği gibi kaydırır, böylece kaydırma çubukları görünür. Sorun: Görünüm görünür kaydırma çubuklarıyla yeniden boyutlandırıldığında, ızgara katmanının alt katmanları.

http://vimeo.com/16987653

Gördüğünüz gibi kaydırma çubukları (başka bir deyişle görünmez olduğunda içeriğin yüksekliği sınırları içinde oturmakta, hiçbir sorun yoktur: Burada sorunu gösteren bir video kaydırma görünümü). Bunun, mizanpaj yöneticisinde bir sorun olmadığını ve tek sütunlarla uğraştığını söyleyebilirim, çünkü aynı şeyi kaydırma görünümü olmadan denedim ve hiçbir sıkıntı yok.

Her türlü tavsiye büyük önem taşımaktadır.

cevap

1

Bu sorunu hem katman hem de görünümün koordinat sistemini çevirerek çözdünüz (sol üst köşedeki başlangıç).

+8

Bunu nasıl yaptığınıza dair bir örnek verebilir misiniz? –