SORU
28 EYLÜL 2010, Salı


Nasıl metin almak için bir CATextLayer açık olmak

CATextLayer eklenen CALayer yaptım ve metin bulanık çıkıyor. Doktorlar, "alt-piksel", ama pek bir anlam ifade etmiyor benim için. kenar yumuşatma konuşuyorlar Herkes açık metin biraz CATextLayer yapan kod parçacığı var mı?

İşte Apple'ın belgeleri metni:

Not: CATextLayer devre dışı bırakır alt-piksel metin işlenirken kan kaybediyorlar. Metin sadece alt-piksel kullanırken kenar yumuşatma çizilebilir aynı zamanda mevcut opak bir arka plan içine birleştirilir bu tıklayın. Alt-antialiased metin çizmek için yolu yok kendisi, bir resim veya bir katman, ayrı ayrı önceden içine olsun arka plana sahip metin örmeye piksel piksel. Ayarı EVET katmanın opaklık özelliği oluşturma değişmez mod.

İkinci cümlede ima eden bir can almak iyi görünümlü metin eğer bir composites Bir existing opaque background at the same time that it's rasterized. Bu harika, ama nasıl bileşik ve nasıl verirsin opak bir arka plan ve nasıl seçmek?

Kiosk bir Menü kendi örnekte kullandıkları kod gibi: (X, ama ben çalıştığını varsayalım! iOS) işletim sistemi bulunuyor

NSInteger i;
for (i=0;i<[names count];i  ) {
    CATextLayer *menuItemLayer=[CATextLayer layer];
    menuItemLayer.string=[self.names objectAtIndex:i];
    menuItemLayer.font=@"Lucida-Grande";
    menuItemLayer.fontSize=fontSize;
    menuItemLayer.foregroundColor=whiteColor;
    [menuItemLayer addConstraint:[CAConstraint
         constraintWithAttribute:kCAConstraintMaxY
                      relativeTo:@"superlayer"
                       attribute:kCAConstraintMaxY
                          offset:-(i*height spacing initialOffset)]];
    [menuItemLayer addConstraint:[CAConstraint
         constraintWithAttribute:kCAConstraintMidX
                      relativeTo:@"superlayer"
                       attribute:kCAConstraintMidX]];
    [self.menuLayer addSublayer:menuItemLayer];
} // end of for loop 

Teşekkürler!


EDİT: ben bulanık metin sonuçlandı aslında kullanılan kod Eklemek. CATextLayer yerine UILabel bir ekleme ama onun yerine siyah bir kutu alma konusunda yayınlanan ilgili bir soru. http://stackoverflow.com/questions/3818676/adding-a-uilabels-layer-to-a-calayer-and-it-just-shows-black-box

CATextLayer* upperOperator = [[CATextLayer alloc] init];
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat components1[4] = {1.0, 1.0, 1.0, 1.0};
CGColorRef almostWhite = CGColorCreate(space,components1);
CGFloat components2[4] = {0.0, 0.0, 0.0, 1.0};
CGColorRef almostBlack = CGColorCreate(space,components2);
CGColorSpaceRelease(space);
upperOperator.string = [NSString stringWithFormat:@"13"];
upperOperator.bounds = CGRectMake(0, 0, 100, 50);
upperOperator.foregroundColor = almostBlack;
upperOperator.backgroundColor = almostWhite;
upperOperator.position = CGPointMake(50.0, 25.0);
upperOperator.font = @"Helvetica-Bold";
upperOperator.fontSize = 48.0f;
upperOperator.borderColor = [UIColor redColor].CGColor;
upperOperator.borderWidth = 1;
upperOperator.alignmentMode = kCAAlignmentCenter;
[card addSublayer:upperOperator];
[upperOperator release];
CGColorRelease(almostWhite);
CGColorRelease(almostBlack);

EDİT 2: benim cevabım aşağıda bu çözüldü nasıl. sbg.

CEVAP
5 EKİM 2010, Salı


Bir süre önce özel çizim kodu, retina ekran için kontrol edin ve grafikler buna göre ölçek olduğunu öğrendim. UIKit yazı tipi Ölçekleme dahil olmak üzere, bunun büyük kısmını halleder.

CATextLayer. ile değil

Benim bulanıklık üst katmanı benim için sıfır olmadığını, uygulanan dönüşüm vardı bir olduğunu .zPosition Bir sahip geldi. Sıfıra ayarlayarak, bulanıklığı gitti, ve aynı zamanda basın lütfen ciddi tarafından değiştirildi.

Yüksek ve düşük arama yaptıktan sonra CATextLayer .contentsScale ayarlayabileceğiniz buldum ve [[UIScreen mainScreen] scale] ekran çözünürlüğü eşleşecek şekilde ayarlayabilirsiniz. (Bu non-retina için çalıştığını düşünüyorum, ama kontrol de yorgun alamadım

Benim için bu CATextLayer dahil sonra metin keskin oldu. Not - üst tabaka için gerekli değil.

Ve bu bulanıklık? 3D, ama metin temizlemek başlar çünkü siz fark etmeseniz ve hareket halinde iken, söyleyemezsin dönen olduğunda geri geliyor.

Sorun çözüldü!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • John Lynn

    John Lynn

    8 Ocak 2010
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013