ฉันมีปัญหาที่ฉันมีชุดของลำดับ 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" forKey:@"MyAnimationType"];
    [[volumeControlLevel layer] addAnimation:volumeControlAnimation forKey:nil];    
}
- (void)throbUp
{
    doThrobUp = true;
    CATransition *animation = [CATransition animation]; 
    [animation setType:kCATransitionFade];
    [animation setSubtype:kCATransitionFromTop];
    [animation setDelegate:self];
    [hearingAidHalo setBackgroundImage:[UIImage imageNamed:@"m13_grayglow.png"] forState:UIControlStateNormal];
    [animation setDuration:2.0];
    [animation setValue:@"Throb" forKey:@"MyAnimationType"];
    [[hearingAidHalo layer] addAnimation:animation forKey:nil];
}
ใน AnimationDidStop ของคุณมอบหมาย:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{
    NSString* value = [theAnimation valueForKey:@"MyAnimationType"];
    if ([value isEqualToString:@"Throb"])
    {
       //... Your code here ...
       return;
    }
    if ([value isEqualToString:@"Special1"])
    {
       //... Your code here ...
       return;
    }
    //Add any future keyed animation operations when the animations are stopped.
 }
อีกแง่มุมหนึ่งคือช่วยให้คุณสามารถรักษาสถานะในระบบการจับคู่ค่าคีย์แทนที่จะต้องเก็บไว้ในคลาสตัวแทนของคุณ รหัสยิ่งน้อยยิ่งดี
ให้แน่ใจว่าได้ตรวจสอบแอปเปิ้ลในการอ้างอิงที่สำคัญราคาคู่ Coding
มีเทคนิคที่ดีกว่าสำหรับการระบุ CAAnimation / CATransition ในตัวแทน AnimationDidStop หรือไม่
ขอบคุณ - แบทการ์