การใช้ [UIColor colorWithRed: green: blue: alpha:] ใช้ไม่ได้กับ UITableView seperatorColor?


86

ฉันกำลังพยายามกำหนดค่าสีแยกสีเทาเข้ม ทำไมต่อไปนี้ไม่ทำอะไรเลย?

self.tableView.seperatorStyle = UITableViewCellSeperatorStyleSingleLine;
self.tableView.seperatorColor = [UIColor colorWithRed: 127 green:127 blue:127 alpha:1];

ส่งคืนตารางโดยไม่มีตัวคั่นเลย

ทันทีที่ฉันใช้[UIColor blackColor]ฉันก็จะแยกตัวออกได้ดี ข้อตกลงคืออะไร?

คำตอบ:


211

คุณต้องหารด้วย 255.0

เนื่องจากฉันแทบจะไม่เคยใช้ค่าระหว่าง 1.0 ถึง 0.0 เลยฉันจึงสร้างหมวดหมู่ UIColor ที่เรียบง่ายมากซึ่งทำการแบ่งส่วนที่ดูยุ่ง ๆ ด้วยตัวเอง: (จากhttp://github.com/Jon889/JPGeneral )

//.h file
@interface UIColor (JPExtras)
+ (UIColor *)colorWithR:(CGFloat)red G:(CGFloat)green B:(CGFloat)blue A:(CGFloat)alpha;
@end

//.m file
@implementation UIColor (JPExtras)
+ (UIColor *)colorWithR:(CGFloat)red G:(CGFloat)green B:(CGFloat)blue A:(CGFloat)alpha {
    return [UIColor colorWithRed:(red/255.0) green:(green/255.0) blue:(blue/255.0) alpha:alpha];
}
@end

คุณสามารถทำได้ (หากคุณนำเข้าหมวดหมู่ที่ฉันลิงก์ไว้ด้านบน):

[UIColor colorWithR:127 G:127: B:127 A:1];

5
เป็นค่ามาตรฐาน 0-1 ในอุตสาหกรรมหรือไม่? คุณสามารถเปิดแอปพลิเคชั่นแต่งรูปใด ๆ ก็ได้และตัวเลือกสีจะให้ค่าตั้งแต่ 0-255 ไม่ว่าฉันจะสงสัยว่าทำไมพวกเขาถึงให้คุณแบ่งงานพิเศษ
The Muffin Man

1
@ นิก - นั่นเป็นคำถามที่ดี ฉันสงสัยว่าเป็นเพราะUIColorต้องการรองรับ 'สีเข้ม' (นั่นคือสีที่มีความลึกมากกว่า 24 บิตหรือ 32 ที่มีอัลฟา) แน่นอนว่ายังไม่เปลี่ยนความจริงวิธีการอำนวยความสะดวกในตัว (พร้อมกับการรองรับฐานสิบหก) จะเป็นประโยชน์กับนักพัฒนาหลายคนอย่างชัดเจน!
lxt

เช่นเดียวกันกับค่าฐานสิบหก ในบางครั้งเราได้สีเป็นฐานสิบหกเพื่อที่จะไม่คำนวณด้วยมือเราสามารถใช้ได้: ตัวอย่างเช่นสำหรับ # C94557 จะเป็น: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF สีเขียว: (CGFloat) 0x45 / 0xFF สีน้ำเงิน: (CGFloat) 0x57 / 0xFF อัลฟา: 1.0];

มีสองวิธีใหม่ใน UIColor ที่ยอมรับค่าจำนวนเต็มตั้งแต่ 0 ถึง 255 ดูคำตอบของฉันด้านล่าง
Blip

59

เนื่องจากวิธีการ UIColor ของคุณต้องการการลอยตัวจาก 0-1 ไม่ใช่ 0-255 คุณต้องหารค่า RGB ทั้งหมดของคุณด้วย 255.0 ดังนี้:

self.tableView.seperatorColor = [UIColor colorWithRed:127.0f/255.0f green:127.0f/255.0f blue:127.0f/255.0f alpha:1.0f];

3

คุณต้องหารค่าของคุณด้วย 255 เนื่องจากช่วงคือ 0-1 ใช้ 127/255 = 0.49f แล้วพิมพ์แทน มันเป็นสีขาว :)

แก้ไข: สาเหตุของความคิดเห็นฉันได้เพิ่มรหัสว่าจะแก้อย่างไร:

-(float)getRGBValue:(int) rgbValue{  
    return rgbValue/255.0;
]

1

มีสองวิธีใหม่UIColorที่ยอมรับค่าจำนวนเต็มตั้งแต่ 0 ถึง 255:

UIColor(red: Int, green: Int, blue: Int)

และ

UIColor(alpha: Float, red: Int, green: Int, blue: Int)

มันไม่ได้อยู่ในเอกสาร แต่ฉันเคยใช้มันและใช้งานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.