سؤال

حسنًا، أحاول رسم مربع متقطع مقسم إلى أقسام حيث سأضع المحتوى.هذا هو الكود الخاص بي:

NSBezierPath *path = [NSBezierPath bezierPathWithRect:dirtyRect];
[path setLineWidth:3];
CGFloat pattern[2] = {5, 5};
[path setLineDash:pattern count:2 phase:0];
CGFloat totalHeight = header.frame.origin.y - 10;
CGFloat sectionOffset = 0;
if([game getNumPlayers] == 2) {
    sectionOffset = totalHeight / 2;
} else if([game getNumPlayers] == 3) {
    sectionOffset = totalHeight / 3;
} else if([game getNumPlayers] == 4) {
    sectionOffset = totalHeight / 4;
}
for(int i = 0; i < [[game getPlayers] count]; i++) {
    [path moveToPoint:NSMakePoint(0, totalHeight - (sectionOffset * i))];
    [path lineToPoint:NSMakePoint(dirtyRect.size.width, totalHeight - (sectionOffset * i))];
}
[path stroke];

تم تضمين هذا في طريقة drawRect الخاصة بطريقة العرض المخصصة الخاصة بي، لذا فإن dirtyRect هو NSRect مكافئ لحدود العرض.يشير الرأس المتغير إلى عرض آخر في العرض الفائق، والذي أقوم بتحديد موقع الخطوط منه.

فيما يلي لقطة شاشة لما يرسمه هذا الرمز فعليًا (باستثناء التسمية الواضحة):

كما ترون، ما لم نكن نتعامل مع وهم بصري مؤسف للغاية، وهو ما أشك فيه، فإن الفواصل الموجودة في الصندوق تبدو أكثر سمكًا من الخطوط العريضة للصندوق.لقد قمت بشكل صريح بتعيين lineWidth لكائن المسار ليكون ثلاثة، لذلك لست متأكدًا من سبب ذلك.سأكون ممتنًا جدًا لأية اقتراحات يمكن تقديمها.

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

المحلول

حسنًا، أعتقد أن المشكلة تكمن في أن الصندوق الخارجي الخاص بك يتم قصه من حواف منظره.أنت تطلب خطًا بعرض 3 نقاط، لذا إذا كان لديك dirtyRect هي الحدود الفعلية للعرض، ثم 1.5 نقطة من المربع المرفق ستكون الخارج العرض، لذلك سترى فقط 1.5 نقطة من خطوط الحافة.

تظهر الخطوط الداخلية سمك 3 نقاط كاملاً.

يمكنك إصلاح ذلك عن طريق القيام بشيء مثل:

const CGFloat lineWidth = 3;
NSBezierPath *const path = [NSBezierPath bezierPathWithRect:NSInsetRect(dirtyRect, lineWidth/2, lineWidth/2)];
path.lineWidth = lineWidth;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top