2010-11-18 14 views
1

Fotoğraflarım/iPhoto komut dosyası köprüsünü kaplayan bir coverflow benzeri görüntü karuseli var. İlk cevaplayıcıyı kabul etmek için ayarlanmış görünümüm var ve sol ve sağ oklar için yöntemler uyguladı, ancak kavramsal olarak katmanları tıklanabilir hale getirmeye nasıl yaklaşacağımı anlayamıyorum. Fareyi indiren olayları kabul etmenin içerdiği görüşün işi olduğunu biliyorum, ancak parçaları kafamda bir araya getiremiyorum.Tıklanabilir CALayer UI'leri

Genel olarak CALAYER'leri düğmeler vb. Gibi UI nesnelerine dönüştürmeye çalışmalı mıyım? Çünkü onlar başka şekillerde çok esnektir ve onlarla çalışmayı seviyorum.

Teşekkürler!

cevap

3

Tamam, ben bir araya topladım. Bağlam, yerleşik düzen yöneticisi ile kısıtladığım bir alt katmanı (CATextLayer) ile özel bir görünümüm var. İşte awakeFromNib ben aşırı binmek özel bir görünüm için mouseDown yöntemini Sonra CustomView.m

yılında
- (void) awakeFromNib { 

CALayer *layer = [CALayer layer]; 
layer.backgroundColor = [CGColorHolder black]; 
layer.layoutManager = [CAConstraintLayoutManager layoutManager]; 
[self setLayer:layer]; 
[self setWantsLayer:YES]; 

CATextLayer *textLayer = [CATextLayer layer]; 
textLayer.string = @"TextLater"; 
textLayer.name = @"textLayer"; 
textLayer.fontSize = 42.0f; 
textLayer.alignmentMode = kCAAlignmentCenter; 
[textLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMidX relativeTo:@"superlayer" attribute:kCAConstraintMidX offset:0.0f]]; 
[textLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" attribute:kCAConstraintMaxY offset:-50.0f]]; 

} 

olduğunu. -hitTest kullanarak, mousedown'ın oluştuğu noktayı içeren katmanı döndürebilir ve sonra da katmana vurulduğunu göstermek için katmanın bazı özniteliklerini ayarlayın. Ben bu gerçekten sofistike açısından beni alacak ne kadar bilmiyorum

[window acceptsMouseMovedEvents]; 

:

- (void)mouseDown:(NSEvent *)theEvent { 

CALayer *layer = [self.layer hitTest:NSPointToCGPoint([theEvent locationInWindow])]; 
layer.backgroundColor = [CGColorHolder red]; 

} Ayrıca

, emin içeren pencere mouseMoved kabul eder olayları yapmak zorunda UI. Buradan, iade edilen katmana, iade edilen isme göre ne yapılacağını muhtemelen devredeceğim. Ama bu, çirkin bir şekilde hızlı olabilir, bu yüzden kendi sorumu burada cevaplamam da, gerçekten ne yaptığını bilen birinden bir miktar girdi almayı çok isterim! : D Teşekkürler!