سؤال

أقوم بإنشاء uitableviewcells الخاصة بي مع خلفية متدرجة. لدي كل المنطق والرسم الذي تم إجراؤه ، لكن الشيء الوحيد الذي أريد إصلاحه هو "الضجة" حول زوايا زنزانتي المخصصة:

alt text http://grab.by/27sm

إذا قمت بتكبير الزوايا ، يمكنك أن ترى ما أتحدث عنه. فيما يلي الرمز الذي أستخدمه لإنشاء الخلية:

CGContextRef c = UIGraphicsGetCurrentContext();
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef myGradient = nil;
CGFloat components[8] = TABLE_CELL_BACKGROUND;
CGContextSetStrokeColorWithColor(c, [[UAColor colorWithWhite:0.7 alpha:1] CGColor]);
CGContextSetLineWidth(c, 2);
CGContextSetAllowsAntialiasing(c, YES);
CGContextSetShouldAntialias(c, YES);
CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
CGFloat miny = CGRectGetMinY(rect) , maxy = CGRectGetMaxY(rect) ;

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, minx, miny);
CGPathAddArcToPoint(path, NULL, minx, maxy, midx, maxy, kDefaultMargin);
CGPathAddArcToPoint(path, NULL, maxx, maxy, maxx, miny, kDefaultMargin);
CGPathAddLineToPoint(path, NULL, maxx, miny);
CGPathAddLineToPoint(path, NULL, minx, miny);
CGPathCloseSubpath(path);

// Fill and stroke the path
CGContextSaveGState(c);
CGContextAddPath(c, path);
CGContextClip(c);

CGFloat locations[2] = { 0.0, 1.0 };
CGFloat mycomponents[8] = TABLE_CELL_BACKGROUND;
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
myGradient = CGGradientCreateWithColorComponents(myColorspace, mycomponents, locations, 2);
CGContextDrawLinearGradient(c, myGradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), 0);

CGContextRestoreGState(c);  
CGContextAddPath(c, path);
CGContextStrokePath(c);

ما الذي يمكنني فعله لتنعيم الحواف مع الحفاظ على سمك حافة ثابتة في جميع الخلايا؟

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

المحلول

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

فيما يلي الجزء ذي الصلة من التعليمات البرمجية من تطبيقي ، Funversation ، لرسم أوراق اللعب بزوايا مستديرة مماثلة لما لديك.

CGRect rect = [self bounds];
rect.size.width -= lineWidth;
rect.size.height -= lineWidth;
rect.origin.x += lineWidth / 2.0;
rect.origin.y += lineWidth / 2.0;

أضف ذلك قبل حسابك لـ Minx و Midx و Maxx وما إلى ذلك ، ويجب أن تكون السكتات الدماغية لشكلك موحدة.

نصائح أخرى

الطريقة الأخرى لجعل السكتة الدماغية متسقة هي تحريك مكالمات AddPath و StrokePath أعلى مكالمة RestoregState - أي السكتة الدماغية أثناء قصها.

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

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