จะเปลี่ยนเฟสรูปแบบเมื่อใช้ [UIColor colorWithPatternImage:] ได้อย่างไร

ฉันใช้ [UIColor colorWithPatternImage:] เพื่อตั้งค่าภาพพื้นหลังสำหรับ UITableViewCell ที่จัดกลุ่มของฉัน ฉันได้มุมมนฟรีสำหรับเซลล์ของฉัน และทุกอย่างดูดี จนกระทั่งฉันพยายามที่จะทำให้เซลล์มีความสูงที่แตกต่างออกไป

ตามหลักการแล้ว ฉันต้องการให้ภาพพื้นหลังอยู่ตรงกลางในแนวตั้ง แต่เมธอด colorWithPatternImage: จะเริ่มต้นรูปแบบรูปภาพจากมุมซ้ายล่าง ซึ่งทำให้เซลล์ของฉันดูไม่ดี

มันบอกในเอกสารว่า

"ตามค่าเริ่มต้น เฟสของสีที่ส่งคืนคือ 0 ซึ่งทำให้มุมซ้ายบนของรูปภาพสอดคล้องกับต้นกำเนิดของภาพวาด หากต้องการเปลี่ยนเฟส ให้กำหนดสีให้เป็นสีปัจจุบัน จากนั้นใช้ CGContextSetPatternPhase ฟังก์ชั่นเปลี่ยนเฟส"

แต่ฉันไม่รู้ว่าจะใช้ CGContextSetPatternPhase กับการใช้งานปัจจุบันของฉันอย่างไร

ฉันเหนื่อย

- (void)drawRect:(CGRect)rect 
{
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSaveGState(context);

    CGSize phase = CGSizeMake(50, 50);
    CGContextSetPatternPhase(context, phase);

    UIImage* image = [UIImage imageNamed:@"cell_background"];

    UIColor* color = [UIColor colorWithPatternImage:image];

    self.backgroundColor = color;

    CGContextRestoreGState(context);

    [super drawRect:rect];
}

แต่นั่นไม่มีผลกระทบต่อระยะรูปแบบ ใครสามารถบอกฉันได้ว่าฉันจะใช้มันอย่างไร?

ขอบคุณมาก,

โจเซฟ


person Joseph Lin    schedule 06.07.2011    source แหล่งที่มา


คำตอบ (1)


โดยทั่วไปการเรียกกราฟิกคอร์จะใช้เป็นส่วนหนึ่งของกระบวนการวาดแบบเฉพาะ การตั้งค่าคุณสมบัติ backgroundColor ไม่ได้วาดอะไรเลย แต่เพียงกำหนดวิธีการดึงมุมมองตามค่าเริ่มต้น คู่มือการเขียนโปรแกรม Quartz 2D มีคำอธิบายวิธีการ วาดภาพโดยใช้ภาพลวดลาย; คุณอาจใช้ทางลัดผ่านได้

CGColorRef color = [UIColor colorWithPatternImage:image].CGColor;
CGContextSetFillColorWithColor(context, color);
CGContextFillRect(context, self.bounds);

…แต่ฉันไม่รับประกัน เพราะรูปแบบ UIColor อาจเล่นได้ไม่ดีกับ Core Graphics คุณอาจต้องใช้เส้นทางที่ซับซ้อนกว่านี้ตามที่อธิบายไว้ในลิงก์ด้านบน

person Noah Witherspoon    schedule 06.07.2011
comment
ขอบคุณโนอาห์ที่เปลี่ยนขั้นตอนของรูปแบบอย่างแท้จริง น่าเสียดายที่สิ่งนี้ใช้ไม่ได้กับสถานการณ์ของฉันเนื่องจาก drawRect: ดึงเลเยอร์ด้านหลังสุดของเซลล์ และฉันก็สูญเสียมุมโค้งมนและสิ่งของต่างๆ ไป แต่ฉันคิดว่าฉันควรเปิดคำถามอื่นเกี่ยวกับเรื่องนี้ - person Joseph Lin; 07.07.2011