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

27
ภาพเคลื่อนไหวการหมุน 360 องศาของ UIView Infinite?
ฉันพยายามหมุนUIImageViewมุมมอง 360 องศาและดูบทช่วยสอนออนไลน์หลายทาง ฉันไม่สามารถทำงานได้เลยโดยไม่UIViewหยุดหรือกระโดดไปที่ตำแหน่งใหม่ ฉันจะบรรลุสิ่งนี้ได้อย่างไร สิ่งล่าสุดที่ฉันได้ลองคือ: [UIView animateWithDuration:1.0 delay:0.0 options:0 animations:^{ imageToMove.transform = CGAffineTransformMakeRotation(M_PI); } completion:^(BOOL finished){ NSLog(@"Done!"); }]; แต่ถ้าฉันใช้ 2 * pi มันก็ไม่ขยับเลย (เพราะมันอยู่ในตำแหน่งเดียวกัน) ถ้าฉันพยายามทำเพียงไพ (180 องศา) มันใช้งานได้ แต่ถ้าฉันเรียกวิธีนี้อีกครั้งมันหมุนไปข้างหลัง แก้ไข : [UIView animateWithDuration:1.0 delay:0.0 options:0 animations:^{ [UIView setAnimationRepeatCount:HUGE_VALF]; [UIView setAnimationBeginsFromCurrentState:YES]; imageToMove.transform = CGAffineTransformMakeRotation(M_PI); } completion:^(BOOL finished){ NSLog(@"Done!"); }]; ไม่ทำงานเช่นกัน …

17
ยกเลิกภาพเคลื่อนไหว UIView หรือไม่
เป็นไปได้ไหมที่จะยกเลิกUIViewภาพเคลื่อนไหวในขณะที่กำลังดำเนินการอยู่ หรือฉันต้องลงไปที่ระดับ CA? นั่นคือฉันได้ทำบางสิ่งเช่นนี้แล้ว (อาจตั้งค่าแอนิเมชั่นสิ้นสุดด้วย): [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:duration]; [UIView setAnimationCurve: UIViewAnimationCurveLinear]; // other animation properties // set view properties [UIView commitAnimations]; แต่ก่อนที่อนิเมชั่นจะเสร็จสมบูรณ์และฉันได้รับอีเว้นท์สิ้นสุดของอนิเมชั่นฉันต้องการยกเลิก (ตัดให้สั้น) เป็นไปได้ไหม Googling around พบว่ามีเพียงไม่กี่คนที่ถามคำถามเดียวกันโดยไม่มีคำตอบและคนหนึ่งหรือสองคนที่คาดเดาว่าไม่สามารถทำได้

4
ฉันจะใช้มุมมองการแปลงเป็น UIView ได้อย่างไร
ฉันกำลังมองหาการเปลี่ยนมุมมองบน UIView (เช่นเห็นใน coverflow) มีใครรู้บ้างไหมว่าสิ่งนี้เป็นไปได้หรือไม่? ฉันได้ตรวจสอบการใช้งานCALayerและใช้งานพอดคาสต์ Core Animation ที่ใช้งานได้จริงทั้งหมด แต่ฉันยังไม่ชัดเจนเกี่ยวกับวิธีสร้างการแปลงรูปแบบนี้บน iPhone ความช่วยเหลือคำแนะนำหรือตัวอย่างโค้ดจะได้รับการชื่นชมจริงๆ!

8
วิธีปฏิบัติที่ดีที่สุดสำหรับ iPhone UIView Animation
อะไรคือวิธีปฏิบัติที่ดีที่สุดในการสร้างภาพเคลื่อนไหวการเปลี่ยนมุมมองบน iPhone ตัวอย่างเช่นViewTransitionsโครงการตัวอย่างจาก apple ใช้รหัสเช่น: CATransition *applicationLoadViewIn = [CATransition animation]; [applicationLoadViewIn setDuration:1]; [applicationLoadViewIn setType:kCATransitionReveal]; [applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; [[myview layer] addAnimation:applicationLoadViewIn forKey:kCATransitionReveal]; แต่ยังมีตัวอย่างโค้ดที่ลอยอยู่รอบ ๆ ตาข่ายซึ่งมีลักษณะดังนี้: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.75]; [UIView setAnimationDelegate:self]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES]; [myview removeFromSuperview]; [UIView commitAnimations]; แนวทางที่ดีที่สุดคืออะไร หากคุณสามารถให้ข้อมูลโค้ดได้เช่นกัน หมายเหตุ:ฉันไม่สามารถรับวิธีที่สองเพื่อทำงานอย่างถูกต้อง

15
การปิดใช้งานภาพเคลื่อนไหวโดยนัยใน - [CALayer setNeedsDisplayInRect:]
ฉันมีเลเยอร์พร้อมรหัสการวาดที่ซับซ้อนในเมธอด -drawInContext: ฉันพยายามลดจำนวนภาพวาดที่ฉันต้องทำดังนั้นฉันจึงใช้ -setNeedsDisplayInRect: เพื่ออัปเดตเฉพาะส่วนที่เปลี่ยนแปลง มันใช้งานได้อย่างยอดเยี่ยม อย่างไรก็ตามเมื่อระบบกราฟิกอัปเดตเลเยอร์ของฉันมันก็เปลี่ยนจากภาพเก่าเป็นภาพใหม่โดยใช้ cross-fade ฉันต้องการให้สลับทันที ฉันได้ลองใช้ CATransaction เพื่อปิดการกระทำและตั้งเวลาเป็นศูนย์และไม่ทำงาน นี่คือรหัสที่ฉันใช้: [CATransaction begin]; [CATransaction setDisableActions: YES]; [self setNeedsDisplayInRect: rect]; [CATransaction commit]; มีวิธีอื่นใน CATransaction ที่ฉันควรใช้แทน (ฉันได้ลอง -setValue: forKey: with kCATransactionDisableActions, ผลลัพธ์เดียวกัน)

1
“ ผู้รับประเภท 'CALayer' สำหรับข้อความอินสแตนซ์คือการประกาศไปข้างหน้า "หมายความว่าอย่างไร
ฉันกำลังย้ายบล็อกโค้ดจากโปรเจ็กต์ iOS4 ไปยัง iOS5 และฉันมีปัญหากับ ARC รหัสสร้าง PDF จากการจับภาพหน้าจอ รหัสการสร้าง PDF UIView *captureView; ... NSMutableData *pdfData = [NSMutableData data]; UIGraphicsBeginPDFContextToData(pdfData, captureView.bounds, nil); UIGraphicsBeginPDFPage(); CGContextRef pdfContext = UIGraphicsGetCurrentContext(); [captureView.layer renderInContext:pdfContext]; UIGraphicsEndPDFContext(); บรรทัด renderInContext [captureView.layer renderInContext:pdfContext]; สร้างข้อผิดพลาดต่อไปนี้ Automatic Reference Counting issue Receiver type 'CALayer' for instance message is a forward declaration มีความคิดอะไรเกิดขึ้นที่นี่?

6
จะสร้างฟังก์ชันการค่อยๆเปลี่ยนแบบกำหนดเองด้วย Core Animation ได้อย่างไร
ฉันกำลังสร้างภาพเคลื่อนไหวCALayerตามCGPath(QuadCurve) ได้ดีทีเดียวใน iOS แต่ฉันต้องการใช้ฟังก์ชั่นการค่อยๆเปลี่ยนที่น่าสนใจกว่าที่Apple มีให้ (EaseIn / EaseOut ฯลฯ ) ตัวอย่างเช่นฟังก์ชันตีกลับหรือยืดหยุ่น สิ่งเหล่านี้สามารถทำได้กับ MediaTimingFunction (bezier): แต่ฉันต้องการสร้างฟังก์ชันจับเวลาที่ซับซ้อนกว่านี้ ปัญหาคือเวลาของสื่อดูเหมือนจะต้องใช้ลูกบาศก์เบซิเอร์ซึ่งไม่มีประสิทธิภาพเพียงพอที่จะสร้างเอฟเฟกต์เหล่านี้: (ที่มา: sparrow-framework.org ) รหัสเพื่อสร้างดังกล่าวข้างต้นก็เพียงพอที่เรียบง่ายในกรอบอื่น ๆ ซึ่งจะทำให้เรื่องนี้น่าผิดหวังมาก โปรดทราบว่าเส้นโค้งกำลังทำแผนที่เวลาอินพุตกับเวลาเอาต์พุต (เส้นโค้ง Tt) ไม่ใช่เส้นโค้งตำแหน่งเวลา ยกตัวอย่างเช่นeaseOutBounce (T) = Tส่งกลับใหม่ที จากนั้นtจะถูกใช้เพื่อพล็อตการเคลื่อนไหว (หรือคุณสมบัติใด ๆ ที่เราควรทำให้เคลื่อนไหว) ดังนั้นฉันต้องการสร้างแบบกำหนดเองที่ซับซ้อนCAMediaTimingFunctionแต่ฉันไม่รู้ว่าจะทำอย่างไรหรือถ้าเป็นไปได้? มีทางเลือกอื่นหรือไม่? แก้ไข: นี่คือตัวอย่างที่เป็นรูปธรรมในขั้นตอนต่างๆ น่าศึกษามาก :) ฉันต้องการทำให้วัตถุเคลื่อนไหวตามเส้นจากจุดaถึงbแต่ฉันต้องการให้วัตถุนั้น "เด้ง" การเคลื่อนที่ไปตามเส้นโดยใช้เส้นโค้งความสะดวกออกด้านบน ซึ่งหมายความว่ามันจะเป็นไปตามเส้นตรงจากaถึงbแต่จะเร่งและชะลอตัวลงด้วยวิธีที่ซับซ้อนกว่าสิ่งที่เป็นไปได้โดยใช้ CAMediaTimingFunction ที่ใช้ bezier ในปัจจุบัน ช่วยให้เส้นนั้นมีการเคลื่อนไหวของเส้นโค้งตามอำเภอใจที่ระบุด้วย CGPath …

10
จะระบุ CAAnimation ภายในตัวแทน AnimationDidStop ได้อย่างไร
ฉันมีปัญหาที่ฉันมีชุดของลำดับ CATransition / CAAnimation ที่ทับซ้อนกันซึ่งทั้งหมดนี้ฉันจำเป็นต้องดำเนินการแบบกำหนดเองเมื่อภาพเคลื่อนไหวหยุดลง แต่ฉันต้องการตัวจัดการตัวแทนเพียงหนึ่งรายการสำหรับ animationDidStop อย่างไรก็ตามฉันมีปัญหาดูเหมือนจะไม่มีวิธีระบุแต่ละ CATransition / CAAnimation แบบไม่ซ้ำกันในตัวแทนของ animationDidStop ฉันแก้ไขปัญหานี้ผ่านระบบคีย์ / ค่าที่เปิดเผยเป็นส่วนหนึ่งของ CAAnimation เมื่อคุณเริ่มแอนิเมชั่นให้ใช้เมธอด setValue บน CATransition / CAAnimation เพื่อตั้งค่าตัวระบุและค่าที่จะใช้เมื่อ animationDidStop เริ่มทำงาน: -(void)volumeControlFadeToOrange { CATransition* volumeControlAnimation = [CATransition animation]; [volumeControlAnimation setType:kCATransitionFade]; [volumeControlAnimation setSubtype:kCATransitionFromTop]; [volumeControlAnimation setDelegate:self]; [volumeControlLevel setBackgroundImage:[UIImage imageNamed:@"SpecialVolume1.png"] forState:UIControlStateNormal]; volumeControlLevel.enabled = true; [volumeControlAnimation setDuration:0.7]; [volumeControlAnimation setValue:@"Special1" …

5
มุมมองที่รั่วไหลเมื่อเปลี่ยน rootViewController ภายใน TransitionWithView
ในขณะที่ตรวจสอบการรั่วไหลของหน่วยความจำฉันพบปัญหาที่เกี่ยวข้องกับเทคนิคการโทรsetRootViewController:ภายในบล็อกภาพเคลื่อนไหวการเปลี่ยนแปลง: [UIView transitionWithView:self.window duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ self.window.rootViewController = newController; } completion:nil]; หากตัวควบคุมมุมมองเก่า (ตัวที่ถูกแทนที่) กำลังนำเสนอตัวควบคุมมุมมองอื่นอยู่รหัสด้านบนจะไม่ลบมุมมองที่นำเสนอออกจากลำดับชั้นของมุมมอง นั่นคือลำดับของการดำเนินการนี้ ... X กลายเป็น Root View Controller X นำเสนอ Y เพื่อให้มุมมองของ Y ปรากฏบนหน้าจอ ใช้transitionWithView:เพื่อทำให้ Z เป็น Root View Controller ใหม่ ... ดูเหมือนผู้ใช้จะตกลง แต่เครื่องมือลำดับชั้นของมุมมองดีบักจะเปิดเผยว่ามุมมองของ Y ยังคงมีอยู่เบื้องหลังมุมมองของ Z ภายใน a UITransitionView. นั่นคือหลังจากสามขั้นตอนข้างต้นลำดับชั้นของมุมมองคือ: UIWindow UITransitionView UIView (มุมมองของ Y) UIView …

7
วิธีรับข้อความใน CATextLayer ให้ชัดเจน
ฉันได้ทำการCALayerเพิ่มCATextLayerและข้อความออกมาพร่ามัว ในเอกสารพวกเขาพูดถึง "การลบรอยหยักแบบพิกเซลย่อย" แต่นั่นไม่ได้มีความหมายกับฉันมากนัก ใครมีข้อมูลโค้ดที่ทำให้CATextLayerมีข้อความที่ชัดเจน นี่คือข้อความจากเอกสารของ Apple: หมายเหตุ: CATextLayer ปิดการใช้งานการลบรอยหยักพิกเซลย่อยเมื่อแสดงผลข้อความ สามารถวาดข้อความได้โดยใช้การลบรอยหยักแบบพิกเซลย่อยเท่านั้นเมื่อประกอบเข้ากับพื้นหลังทึบแสงที่มีอยู่ในเวลาเดียวกันกับที่มีการแรสเตอร์ ไม่มีวิธีใดที่จะวาดข้อความลบพิกเซลย่อยด้วยตัวเองไม่ว่าจะเป็นรูปภาพหรือเลเยอร์โดยแยกจากกันก่อนที่จะมีพิกเซลพื้นหลังเพื่อสานพิกเซลข้อความเข้าไป การตั้งค่าคุณสมบัติความทึบของเลเยอร์เป็นใช่จะไม่เปลี่ยนโหมดการแสดงผล ประโยคที่สองบอกเป็นนัยว่าเราจะได้ข้อความที่ดูดีถ้าcompositesเป็นข้อความexisting opaque background at the same time that it's rasterized. ที่ดี แต่ฉันจะประกอบมันได้อย่างไรและคุณจะให้พื้นหลังทึบแสงได้อย่างไรและคุณจะแรสเตอร์ได้อย่างไร รหัสที่พวกเขาใช้ในตัวอย่างของเมนูคีออสก์มีดังนี้: (เป็น OS X ไม่ใช่ iOS แต่ฉันคิดว่ามันใช้งานได้!) NSInteger i; for (i=0;i<[names count];i++) { CATextLayer *menuItemLayer=[CATextLayer layer]; menuItemLayer.string=[self.names objectAtIndex:i]; menuItemLayer.font=@"Lucida-Grande"; menuItemLayer.fontSize=fontSize; menuItemLayer.foregroundColor=whiteColor; [menuItemLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.