سؤال

لدي مخصص UIView الذي يرسم باستخدام لها -[drawRect:] طريقة.

المشكلة هي أن مكافحة التعرجات تنتج للغاية لأن الخطوط السوداء خطوط أفقية أو رأسية يتم رسمها ضبابية للغاية.

إذا قمت بتعطيل مكافحة التعرج مع CGContextSetAllowsAntialiasing, ، يتم رسم كل شيء كما هو متوقع.

مكافحة التعرج:
النص بديل http://dustlab.com/stuff/antialias.png.

لا مضاد للتعايش (والتي تبدو وكأنها النتيجة المتوقعة مع AA):
النص البديل http://dustlab.com/stuff/no_antialias.png.

عرض الخط هو بالضبط 1، وجميع الإحداثيات قيم جزء لا يتجزأ.

الشيء نفسه يحدث إذا رسمت مستطيل باستخدام CGContextStrokeRect, ، ولكن ليس إذا أرسم نفس الشيء CGRect مع UIRectStroke.

هل كانت مفيدة؟

المحلول

نظرا لأن السكتة الدماغية توزع كميات متساوية لكلا الجانبين، خط عرض بكسل واحد لا يجب يتم وضعها على تنسيق عدد صحيح، ولكن عند 0.5 بكسل تعويض.

احسب الإحداثيات الصحيحة للخطوط المضطربة مثل هذا:

CGPoint pos = CGPointMake(floorf(pos.x) + 0.5f, floorf(pos.y) + 0.5f);

راجع للشغل: لا يلقي قيمك إلى int والعودة إلى تعويم للتخلص من الجزء العشري. هناك وظيفة لهذا في C يسمى floor.

نصائح أخرى

في إطارات العرض الخاصة بك، ربما لديك قيم تعويم غير أعداد صحيحة. في حين أن الإطارات دقيقة بما يكفي للقيام كسور بكسل (تعويم)، فستحصل على ثمرات إلا إذا قمت بإلغاء

CGRect frame = CGRectMake((int)self.frame.bounds..., (int)...., (int)...., (int)....);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top