คำถามติดแท็ก core-graphics

Core Graphics เป็นเฟรมเวิร์กของ Apple สำหรับการวาดภาพระดับต่ำบน Mac OS X และ iOS

16
ฉันจะวาดเงาภายใต้ UIView ได้อย่างไร
ฉันพยายามวาดเงาใต้ขอบล่างของ a UIViewใน Cocoa Touch ฉันเข้าใจว่าฉันควรใช้CGContextSetShadow()เพื่อวาดเงา แต่คู่มือการเขียนโปรแกรม Quartz 2D นั้นค่อนข้างคลุมเครือ: บันทึกสถานะกราฟิก เรียกใช้ฟังก์ชันCGContextSetShadowส่งผ่านค่าที่เหมาะสม ดำเนินการวาดภาพทั้งหมดที่คุณต้องการใช้เงา กู้คืนสถานะกราฟิก ฉันได้ลองทำสิ่งต่อไปนี้ในUIViewคลาสย่อย: - (void)drawRect:(CGRect)rect { CGContextRef currentContext = UIGraphicsGetCurrentContext(); CGContextSaveGState(currentContext); CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5); CGContextRestoreGState(currentContext); [super drawRect: rect]; } .. แต่สิ่งนี้ไม่ได้ผลสำหรับฉันและฉันก็ติดอยู่กับ (ก) จะไปที่ไหนต่อไปและ (ข) หากมีสิ่งใดที่ฉันต้องทำกับฉันUIViewเพื่อทำงานนี้

26
บริบทที่ไม่ถูกต้อง 0x0 ภายใต้ iOS 7.0 และระบบย่อยสลาย
ฉันได้อ่านผลการค้นหามากมายที่ฉันสามารถค้นหาเกี่ยวกับปัญหาที่น่าสะพรึงกลัวนี้โชคไม่ดีที่แต่ละคนดูเหมือนจะมุ่งเน้นไปที่ฟังก์ชั่นการโทรที่เฉพาะเจาะจง ปัญหาของฉันคือฉันได้รับข้อผิดพลาดเดียวกันจากหลายฟังก์ชั่นซึ่งฉันเดาว่าจะถูกเรียกกลับจากฟังก์ชั่นที่ฉันใช้ เพื่อทำให้เรื่องแย่ลงรหัสที่แท้จริงนั้นอยู่ในกรอบงานส่วนบุคคลที่กำหนดเองซึ่งกำลังนำเข้าในโครงการอื่นและการแก้จุดบกพร่องนั้นไม่ง่ายใช่ไหม ใครช่วยชี้ทางให้ฉันได้? ฉันรู้สึกว่าฉันกำลังเรียกวิธีการบางอย่างไม่ถูกต้องหรือมีบริบทที่ไม่ดี แต่ผลลัพธ์จาก xcode ไม่เป็นประโยชน์ในตอนนี้ : CGContextSetFillColorWithColor: บริบทที่ไม่ถูกต้อง 0x0 นี่เป็นข้อผิดพลาดร้ายแรง แอปพลิเคชั่นนี้หรือไลบรารีที่ใช้กำลังใช้บริบทที่ไม่ถูกต้องและมีส่วนทำให้ความเสถียรและความน่าเชื่อถือของระบบโดยรวมลดลง การแจ้งเตือนนี้เป็นมารยาท: โปรดแก้ไขปัญหานี้ มันจะกลายเป็นข้อผิดพลาดร้ายแรงในการอัปเดตที่จะเกิดขึ้น : CGContextSetStrokeColorWithColor: บริบทที่ไม่ถูกต้อง 0x0 นี่เป็นข้อผิดพลาดร้ายแรง แอปพลิเคชั่นนี้หรือไลบรารีที่ใช้กำลังใช้บริบทที่ไม่ถูกต้องและมีส่วนทำให้ความเสถียรและความน่าเชื่อถือของระบบโดยรวมลดลง การแจ้งเตือนนี้เป็นมารยาท: โปรดแก้ไขปัญหานี้ มันจะกลายเป็นข้อผิดพลาดร้ายแรงในการอัปเดตที่จะเกิดขึ้น CGContextSaveGState: บริบทที่ไม่ถูกต้อง 0x0 นี่เป็นข้อผิดพลาดร้ายแรง แอปพลิเคชั่นนี้หรือไลบรารีที่ใช้กำลังใช้บริบทที่ไม่ถูกต้องและมีส่วนทำให้ความเสถียรและความน่าเชื่อถือของระบบโดยรวมลดลง การแจ้งเตือนนี้เป็นมารยาท: โปรดแก้ไขปัญหานี้ มันจะกลายเป็นข้อผิดพลาดร้ายแรงในการอัปเดตที่จะเกิดขึ้น : CGContextSetFlatness: บริบทที่ไม่ถูกต้อง 0x0 นี่เป็นข้อผิดพลาดร้ายแรง แอปพลิเคชั่นนี้หรือไลบรารีที่ใช้กำลังใช้บริบทที่ไม่ถูกต้องและมีส่วนทำให้ความเสถียรและความน่าเชื่อถือของระบบโดยรวมลดลง การแจ้งเตือนนี้เป็นมารยาท: โปรดแก้ไขปัญหานี้ มันจะกลายเป็นข้อผิดพลาดร้ายแรงในการอัปเดตที่จะเกิดขึ้น : CGContextAddPath: บริบทที่ไม่ถูกต้อง 0x0 นี่เป็นข้อผิดพลาดร้ายแรง แอปพลิเคชั่นนี้หรือไลบรารีที่ใช้กำลังใช้บริบทที่ไม่ถูกต้องและมีส่วนทำให้ความเสถียรและความน่าเชื่อถือของระบบโดยรวมลดลง การแจ้งเตือนนี้เป็นมารยาท: …

11
วิธีรับข้อมูลพิกเซลจาก UIImage (Cocoa Touch) หรือ CGImage (Core Graphics)
ฉันมี UIImage (Cocoa Touch) จากนั้นฉันมีความสุขที่ได้รับ CGImage หรืออะไรก็ได้ที่คุณต้องการ ฉันต้องการเขียนฟังก์ชันนี้: - (int)getRGBAFromImage:(UIImage *)image atX:(int)xx andY:(int)yy { // [...] // What do I want to read about to help // me fill in this bit, here? // [...] int result = (red << 24) | (green << 16) | (blue << 8) | …

16
UIImage: ปรับขนาดแล้วครอบตัด
ฉันทุบหน้าของฉันเป็นแบบนี้มาหลายวันแล้วและแม้ว่าฉันจะรู้สึกอยู่ตลอดเวลาว่าฉันอยู่บนขอบของการเปิดเผยฉันก็ไม่สามารถบรรลุเป้าหมายได้ ฉันคิดว่าก่อนเวลาในขั้นตอนเชิงแนวคิดของการออกแบบของฉันว่ามันเป็นเรื่องเล็กน้อยที่จะคว้าภาพจากกล้องหรือห้องสมุดของ iPhone ปรับขนาดให้สูงถึงระดับที่ระบุโดยใช้ฟังก์ชั่นเทียบเท่ากับตัวเลือกAspect Fill UIImageView (เป็นรหัสทั้งหมด) จากนั้นครอบตัดสิ่งที่ไม่เหมาะสมภายใน CGRect ที่ส่งผ่าน การรับภาพต้นฉบับจากกล้องหรือห้องสมุดเป็นเรื่องเล็กน้อย ฉันตกใจที่ความยากอีกสองขั้นตอนพิสูจน์แล้วว่าเป็นอย่างไร ภาพที่แนบมาแสดงให้เห็นถึงสิ่งที่ฉันพยายามที่จะบรรลุ ใครบางคนจะกรุณาพอที่จะจับมือฉันได้ไหม ทุกตัวอย่างโค้ดที่ฉันพบมาดูเหมือนว่าจะทำให้ภาพแตกหรือคว่ำดูเหมือนว่าไร้สาระดึงออกนอกขอบเขตหรือทำงานไม่ถูกต้อง

18
CGContextDrawImage ดึงภาพกลับหัวเมื่อผ่าน UIImage.CGImage
ไม่มีใครรู้ว่าทำไมการCGContextDrawImageวาดภาพของฉันกลับหัวกลับหาง? ฉันกำลังโหลดภาพจากแอปพลิเคชันของฉัน: UIImage *image = [UIImage imageNamed:@"testImage.png"]; จากนั้นขอให้กราฟิกหลักวาดตามบริบทของฉัน: CGContextDrawImage(context, CGRectMake(0, 0, 145, 15), image.CGImage); มันแสดงผลในสถานที่ที่เหมาะสมและขนาด แต่ภาพกลับหัว ฉันต้องคิดถึงบางสิ่งที่ชัดเจนจริง ๆ ที่นี่หรือไม่

19
วิธีการหมุน UIImage 90 องศา
ฉันมีUIImageที่อยู่UIImageOrientationUp(แนวตั้ง) ที่ผมอยากจะหมุนทวนเข็มนาฬิกา 90 องศา (แนวนอน) CGAffineTransformฉันไม่ต้องการที่จะใช้ ฉันต้องการพิกเซลของUIImageเพื่อเปลี่ยนตำแหน่งจริง ฉันใช้บล็อกของรหัส (แสดงด้านล่าง) เดิมทีมีจุดประสงค์เพื่อปรับขนาด a UIImageเพื่อทำสิ่งนี้ ฉันตั้งขนาดเป้าหมายเป็นขนาดปัจจุบันของUIImageแต่ฉันได้รับข้อผิดพลาด: (ข้อผิดพลาด): CGBitmapContextCreate: ไบต์ข้อมูล / แถวที่ไม่ถูกต้อง: ควรมีอย่างน้อย 1708 สำหรับ 8 บิต / ส่วนประกอบจำนวนเต็ม 8 ส่วนประกอบ 3 องค์ประกอบ kCGImageAlphaPremultipliedLast (ฉันไม่ได้รับข้อผิดพลาดเมื่อใดก็ตามที่ฉันให้ขนาดที่เล็กลงเป็นขนาดเป้าหมาย BTW) ฉันจะหมุนUIImageCCW 90 องศาของฉันโดยใช้ฟังก์ชั่นกราฟิกหลักได้อย่างไรขณะที่รักษาขนาดปัจจุบันไว้ -(UIImage*)reverseImageByScalingToSize:(CGSize)targetSize:(UIImage*)anImage { UIImage* sourceImage = anImage; CGFloat targetWidth = targetSize.height; CGFloat targetHeight = targetSize.width; CGImageRef …

7
วาดวงกลมที่สมบูรณ์แบบจากการสัมผัสของผู้ใช้
ฉันมีโครงการฝึกหัดนี้ที่ให้ผู้ใช้สามารถวาดบนหน้าจอขณะที่พวกเขาสัมผัสด้วยนิ้วของพวกเขา แอพที่เรียบง่ายมากฉันกลับไปออกกำลังกายเหมือนเดิม ลูกพี่ลูกน้องตัวน้อยของฉันใช้เสรีภาพในการวาดสิ่งต่าง ๆ ด้วยนิ้วมือของเขากับ iPad ของฉันบนแอพนี้ (ภาพวาดสำหรับเด็ก: วงกลมเส้น ฯลฯ อะไรก็ตามที่อยู่ในใจของเขา) จากนั้นเขาก็เริ่มวาดวงกลมและจากนั้นเขาขอให้ฉันทำให้มันเป็น "วงกลมที่ดี" (จากความเข้าใจของฉัน: ทำให้วงกลมที่ถูกวาดกลมอย่างสมบูรณ์แบบเพราะเรารู้ว่าไม่ว่าเราจะพยายามวาดบางสิ่งด้วยนิ้วของเราบนหน้าจอ วงกลมไม่เคยถูกปัดเศษอย่างที่ควรจะเป็น) ดังนั้นคำถามของฉันที่นี่คือมีวิธีใดในรหัสที่เราสามารถตรวจจับเส้นที่วาดโดยผู้ใช้ที่สร้างเป็นวงกลมและสร้างขนาดประมาณวงกลมเดียวกันโดยการทำให้มันกลมอย่างสมบูรณ์บนหน้าจอ การสร้างเส้นตรงที่ไม่ตรงนั้นเป็นสิ่งที่ฉันรู้ว่าต้องทำอย่างไร แต่สำหรับวงกลมฉันไม่รู้ว่าจะทำอย่างไรกับ Quartz หรือวิธีอื่น ๆ เหตุผลของฉันคือจุดเริ่มต้นและจุดสิ้นสุดของบรรทัดต้องแตะหรือข้ามซึ่งกันและกันหลังจากผู้ใช้ยกนิ้วของเขาเพื่อพิสูจน์ความจริงที่ว่าเขาพยายามวาดวงกลมจริงๆ

19
รับสีที่จางกว่าและเข้มกว่าเล็กน้อยจาก UIColor
ฉันกำลังมองหาที่จะเปลี่ยน UIColor ใด ๆ ให้เป็นแบบไล่ระดับสี วิธีที่ฉันตั้งใจจะทำคือการใช้ Core Graphics ในการวาดการไล่ระดับสี สิ่งที่ฉันพยายามทำคือการได้สีมาพูดว่า: [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0]; และรับ UIColor ซึ่งเป็นสีไม่กี่สีเข้มขึ้นและไม่กี่สีเบา ไม่มีใครรู้วิธีการทำเช่นนี้? ขอบคุณ.

4
เพื่อ drawRect หรือไม่เพื่อ drawRect (เมื่อหนึ่งควรใช้ drawRect / Core Graphics vs subviews / images และทำไม?)
เพื่อชี้แจงจุดประสงค์ของคำถามนี้: ฉันรู้วิธีสร้างมุมมองที่ซับซ้อนทั้งในมุมมองย่อยและการใช้ drawRect ฉันพยายามเข้าใจอย่างถ่องแท้ว่าเหตุใดจึงต้องใช้อย่างใดอย่างหนึ่ง ฉันเข้าใจเช่นกันว่ามันไม่สมเหตุสมผลที่จะปรับให้เหมาะสมล่วงหน้าและทำบางสิ่งที่ยากกว่าก่อนที่จะทำการทำโปรไฟล์ พิจารณาว่าฉันพอใจกับทั้งสองวิธีและตอนนี้ต้องการความเข้าใจที่ลึกซึ้งยิ่งขึ้น ความสับสนมากมายของฉันมาจากการเรียนรู้วิธีทำให้ประสิทธิภาพการเลื่อนดูตารางอย่างราบรื่นและรวดเร็ว แน่นอนแหล่งที่มาดั้งเดิมของวิธีนี้มาจากผู้เขียนที่อยู่เบื้องหลังตัวสั่นด้วยความตื่นเต้นสำหรับ iPhone (tweetie เดิม) โดยพื้นฐานแล้วจะบอกว่าเพื่อให้การเลื่อนตารางเนยเป็นไปอย่างราบรื่นความลับคือไม่ต้องใช้การดูย่อย แต่แทนที่จะวาดทั้งหมดใน uiview ที่กำหนดเอง โดยพื้นฐานแล้วดูเหมือนว่าการใช้การดูย่อยจำนวนมากจะทำให้การเรนเดอร์ช้าลงเพราะพวกเขามีค่าใช้จ่ายจำนวนมาก เพื่อความเป็นธรรมนี้ถูกเขียนขึ้นเมื่อ 3GS เป็นแบรนด์ที่ค่อนข้างใหม่ spankin และ iDevices ได้รับเร็วขึ้นมากตั้งแต่นั้นมา ยังคงใช้วิธีนี้เป็นประจำ แนะนำในinterwebsและที่อื่น ๆ สำหรับตารางที่มีประสิทธิภาพสูง ในความเป็นจริงมันเป็นวิธีการที่แนะนำไว้ในตารางที่แอปเปิ้ลโค้ดตัวอย่างได้รับการแนะนำในวิดีโอ WWDC หลายคน ( ถอนเงินปฏิบัติสำหรับ iOS นักพัฒนา ) และ iOS หลายโปรแกรมหนังสือ มีเครื่องมือที่ดูยอดเยี่ยมในการออกแบบกราฟิกและสร้างรหัส Core Graphics สำหรับพวกเขา ดังนั้นในตอนแรกฉันจึงเชื่อว่า "มีเหตุผลที่ทำให้ Core Graphics มีอยู่มันเร็วมาก" แต่ทันทีที่ฉันคิดว่าฉันได้รับแนวคิด "โปรดปรานกราฟิกหลักเมื่อเป็นไปได้" ฉันเริ่มเห็นว่า …

6
วิธีสร้าง UIImage 1x1 สีบน iPhone แบบไดนามิก
ฉันต้องการสร้าง 1x1 UIImage แบบไดนามิกโดยใช้ UIColor ฉันสงสัยว่าสิ่งนี้สามารถทำได้อย่างรวดเร็วด้วย Quartz2d และฉันกำลังมองหาเอกสารที่พยายามทำความเข้าใจพื้นฐาน อย่างไรก็ตามดูเหมือนว่ามีข้อผิดพลาดที่อาจเกิดขึ้นมากมาย: ไม่ระบุจำนวนบิตและไบต์ต่อสิ่งต่าง ๆ อย่างถูกต้อง, ไม่ระบุแฟล็กที่ถูกต้อง, ไม่ปล่อยข้อมูลที่ไม่ได้ใช้ ฯลฯ สิ่งนี้จะทำได้อย่างปลอดภัยด้วย Quartz 2d (หรือวิธีอื่นที่ง่ายกว่านั้น) ได้อย่างไร?

6
มุมมองเบลอสไตล์ iOS 7
มีใครรู้บ้างเกี่ยวกับการควบคุมใด ๆ ที่จะจำลองมุมมองเบลอสไตล์ iOS7 ฉันสมมติว่าอาจมีคลาสย่อย UIView บางประเภทที่จะจำลองพฤติกรรม ฉันกำลังพูดถึงมุมมองประเภทนี้ซึ่งเบลอฉากหลังอย่างหนามากจนมีเอฟเฟกต์ดึงจากมุมมองพื้นหลัง

8
วิธีควบคุมเงากระจายและเบลอ
ฉันได้ออกแบบองค์ประกอบ UI ในแบบร่างและหนึ่งในนั้นมีเงาที่มีความเบลอ 1 และการแพร่กระจาย 0 ฉันดูที่เอกสารสำหรับคุณสมบัติเลเยอร์มุมมองและเลเยอร์ไม่มีชื่ออะไรแพร่กระจายหรือเบลอหรืออะไรที่เทียบเท่า (ตัวควบคุมเดียวคือ only shadowOpacity) จะควบคุมสิ่งต่างๆเช่นเบลอและกระจายได้อย่างไร? แก้ไข: นี่คือการตั้งค่าของฉันใน Sketch: และนี่คือสิ่งที่ฉันต้องการให้เงาของฉันดูเหมือน: และนี่คือสิ่งที่ดูเหมือนในขณะนี้: หมายเหตุคุณต้องคลิกที่ภาพเพื่อดูเงาจริงๆ รหัสของฉันมีดังนี้: func setupLayer(){ view.layer.cornerRadius = 2 view.layer.shadowColor = Colors.Shadow.CGColor view.layer.shadowOffset = CGSize(width: 0, height: 1) view.layer.shadowOpacity = 0.9 view.layer.shadowRadius = 5 }


15
ฉันจะทำให้ UILabel แสดงข้อความที่ระบุได้อย่างไร
ทั้งหมดที่ฉันต้องการคือเส้นขอบสีดำหนึ่งพิกเซลรอบข้อความ UILabel สีขาวของฉัน ฉันได้รับ UILabel ระดับย่อยด้วยรหัสด้านล่างซึ่งฉันปูด้วยกันอย่างงุ่มง่ามจากตัวอย่างออนไลน์ที่เกี่ยวข้องกันเชิงสัมผัสสองสามตัวอย่าง และมันใช้งานได้ แต่มันช้ามาก (ยกเว้นในโปรแกรมจำลอง) และฉันไม่สามารถทำให้ข้อความอยู่กึ่งกลางในแนวตั้งได้ (ดังนั้นฉันจึงฮาร์ดโค้ดค่า y ในบรรทัดสุดท้ายชั่วคราว) อื้อหือ! void ShowStringCentered(CGContextRef gc, float x, float y, const char *str) { CGContextSetTextDrawingMode(gc, kCGTextInvisible); CGContextShowTextAtPoint(gc, 0, 0, str, strlen(str)); CGPoint pt = CGContextGetTextPosition(gc); CGContextSetTextDrawingMode(gc, kCGTextFillStroke); CGContextShowTextAtPoint(gc, x - pt.x / 2, y, str, strlen(str)); } - (void)drawRect:(CGRect)rect{ …

6
NSLog พร้อมข้อมูล CGPoint
ฉันมี CGPoint ที่เรียกว่าจุดที่ถูกกำหนดให้สัมผัส: UITouch *touch = [touches anyObject]; CGPoint point = [touch locationInView:self]; ฉันต้องการรับค่าพิกัด x ในบันทึกคอนโซลของฉัน: NSLog(@"x: %s", point.x); เมื่อฉันใช้สิ่งนี้เอาต์พุตบันทึกสำหรับสิ่งนี้คือ: x: (ว่าง) ฉันตรวจสอบแล้วว่าจุดนั้นไม่เป็นโมฆะเมื่อสิ่งนี้ถูกเรียกโดยใช้ตัวแก้ไขข้อบกพร่องและนาฬิกาตัวแปร ความช่วยเหลือใด ๆ ที่ชื่นชม ขอบคุณ // :)

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