كيف يمكنني العثور على موقف بكسل من حرف في أحد NSTextView؟

StackOverflow https://stackoverflow.com/questions/869086

  •  22-08-2019
  •  | 
  •  

سؤال

وأنا حاليا باستخدام التعليمات البرمجية التالية لجلب موقف NSView المنطقي رموزا الذي يسير على ما يرام ولكن يبدو بطيئا بعض الشيء، ومواقف ليست على وجه التحديد على نقطة الطابع تقنين والأساس. بشكل جيد للغاية قد يكون صحيحا أن كل ما عليك القيام به هو تكرار رموزا أنفسهم واحدا تلو الآخر وبناء احداثيات نفسي.

وهذا الرمز (وظائف) الآن، فقط نريد أن نرى ما اذا كان يمكن القيام به بشكل أكثر كفاءة أو بشكل صحيح.

// lastRange is any valid, bounds checked character range in an NSTextView


NSLayoutManager *layoutManager = [self layoutManager];
NSRect paragraphRect = [layoutManager boundingRectForGlyphRange:lastRange inTextContainer:[self textContainer]];

// Draw a gradient around the range.
NSGradient * gradient = [self indicatorGradient];
CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetBlendMode(myContext , kCGBlendModeMultiply);
[gradient drawInRect:paragraphRect angle:90];
هل كانت مفيدة؟

المحلول

وهذه هي الطريقة للقيام بذلك. ولكن إذا lastRange هو characterRange كما وصفته أنت، لديك لوضعها من خلال

lastRange = [layoutManager glyphRangeForCharacterRange:lastRange actualRange:NULL];

أولا للحصول على النتائج الصحيحة. تحتاج أيضا إلى التأكد من أن يعلل أصل textcontainer وlayouted النص في وثم القيام

NSPoint containerOrigin = [[container textView] textContainerOrigin];
paragraphRect = NSOffsetRect(paragraphRect,containerOrigin.x,containerOrigin.y);

وقبل الرسم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top