2010-12-18 26 views

cevap

9

Bu mutlak bir acıdır, ancak yapılabilir.

Onların karakter aralığı, CTLineGetStringRange() kullanarak aradığınız aralığında ise, hat kendisi kadar kılacak kadar büyük bulmak için CTLineGetTypographicBounds() kullanmak, çek CTFrameGetLines() kullanarak çerçevedeki çizgilerin tüm almak gerekir ve kullanımı Aralığın başlangıç ​​/ bitiş karakterinin gerçek konumunu belirlemek için CTLineGetOffsetForStringIndex() (eğer çizgi sadece istenen aralığın bir alt dizisidir).

Tüm bunları bir araya getirip, ofsetleri ve yükseklikleri ekleyerek istediğiniz gibi alabilirsiniz. CTLineGetImageBounds()'un grafik bağlamı olmadan çalıştığını unutmayın (ve topladığımdan, zaten oldukça pahalıdır) ve bu sorunu çözmek için gerekli değildir.

+0

Detaylı bir cevap, çok teşekkürler! Böyle şeyler için gerekli olan tüm fonksiyonları bulmak her zaman bir acıdır. :) – Joshua

+1

@Joshua bu cevabı uygularken ur kodunu paylaşabilir mi? Biraz problemim olduğunu ve 3 haftaya kadar çözemediğimi düşünüyorum, lütfen bana yardım edin ... –

+0

@Risma Bunu uygulamak için aslında hiç bir şeyim olmadı ama ihtiyacın olan her şey Sean'ın cevabında. – Joshua

2

ilk aralık sen yalan ilgilenen olan hat (lar) belirler. Ardından, satırın başlangıcından belirli bir dize konumunun bir ofsetini almak için CTLineGetOffsetForStringIndex()'u arayın. CTLineGetImageBounds() ile birlikte, aralığınızdaki ilk ve son karakterlerin bir CGPoint konumunu hesaplamak mümkün olmalıdır.

İlgili konular