2012-05-08 3 views
3

일련의 전체 화면 이미지에 애니메이션을 적용하려고합니다. 각 이미지는 다른 방식으로 애니메이션됩니다. 나는이 애니메이션을 데이터베이스 나 plist 등 어딘가에 저장하고 싶습니다. 단지 하드 코딩 된 것을 원하지 않습니다. 애니메이션은 매우 단순 할 것이며, 이미지 내의 오브젝트는 흔들 리거나 바운스 될 것입니다. 블록을 사용하여 객체에 애니메이션을 적용하고 개별 블록을 데이터 저장소에 저장하는 것이 이상적입니다. 나는 별도의 스크립팅 언어 또는 이와 유사한 것을 사용하고 싶지 않다.스크립팅 애니메이션 블록 iOS

최선의 행동 방침은 무엇입니까?

+0

블록을 데이터 저장소에 저장하여 어떤 목표를 달성하려고합니까? –

+0

약 75 개 이상의 이미지가 애니메이션으로 표시됩니다. 하드 코딩보다 스크립트를 작성하는 것이 더 쉽다고 생각합니다. –

답변

2

는, 예를 들어, PLIST, 당신은 이런 식으로 뭔가를 할 수 스 니펫 :

- (void)loadAnimations 
{ 
    NSArray *animations = [NSArray arrayWithContentsOfFile:@"/Users/H2CO3/animations.plist"]; 
    for (NSDictionary *animation in animations) 
    { 
     UIImage *img = [UIImage imageNamed:[animation objectForKey:@"filename"]]; 
     NSString *animationType = [animation objectForKey:@"animation"]; 
     float duration = [(NSNumber *)[animation objectForKey:@"duration"] floatValue]; 

     if ([animationType isEqualToString:@"bounce"]) 
     { 
      /* animation block 1 */ 
     } 
     else if ([animationType isEqualToString:@"easeinout"]) 
     { 
      /* animation block 2 */ 
     } 
     /* Et cetera... */ 
    } 
} 
+0

감사합니다. 나는이 접근법을 생각하고 있었다. 가장 쉬운 옵션 일 수 있습니다. –

+0

imageNamed를 호출하는 위의 접근 방식은 이미지가 1 개 또는 2 개 이상 있으면 사용 가능한 모든 메모리를 사용하기 때문에 장치에서 충돌합니다. 더 나은 방법은 타이머를 사용하고 타이머가 호출 될 때마다 1 개의 특정 프레임 (PNG 이미지)을로드하는 것입니다. – MoDJ

0

가능하다면 애니메이션을 데이터 저장소에 저장하면 어떤 이점이 있는지 알 수 없습니다. 애니메이션 코드를 반복하지 않으려는 경우 메서드에 넣고 뷰에 메서드를 전달할 수 있습니다. 다음과 같은 코드를 작성하여

<plist> 
<array> 
    <dict> 
     <key>filename</key> 
     <string>first.jpg</string> 
     <key>animation</key> 
     <string>bounce</string> 
     <key>duration</key> 
     <real>0.5</real> 
    </dict> 
    <dict> 
     <key>filename</key> 
     <string>second.jpg</string> 
     <key>animation</key> 
     <string>easeinout</string> 
     <key>duration</key> 
     <real>1.0</real> 
    </dict> 
    <!-- et cetera --> 
</array> 
</plist> 

이 그럼 당신은 실제 애니메이션에이를 디코딩 할 수 : 당신이 그들을 저장하려면

-(void)jiggle:(UIView *)image { 
    [UIView animateWithDuration:.1 
          delay:0 
         options:UIViewAnimationOptionLayoutSubviews 
        animations:^{ 
         image.transform = CGAffineTransformMakeRotation(-5 * M_PI/180); 
        } 
        completion:^(BOOL finished){ 
         [UIView animateWithDuration:.1 
               delay:0 
              options:UIViewAnimationOptionLayoutSubviews 
              animations:^{ 
               image.transform = CGAffineTransformMakeRotation(5 * M_PI/180); 
              } 
              completion:^(BOOL finished){ 
               [UIView animateWithDuration:.1 
                    delay:0 
                    options:UIViewAnimationOptionLayoutSubviews 
                   animations:^{ 
                    image.transform = CGAffineTransformMakeRotation(0 * M_PI/180); 
                   } 
                   completion:nil 
               ]; 
              } 
          ]; 
        } 
    ]; 
} 
+0

75 이미지의 경우 들여 쓰기가 이상하게 들립니다. –

+0

그리고, btw, 이것은 OP의 질문에 대답하지 않습니다. –

+0

@ H2CO3, 들여 쓰기는 애니메이션의 일련의 단계를위한 것입니다. 모든 파일에 적용 할 수있는 애니메이션이므로 파일 개수와 관련이 없습니다. 중첩 된 완료 블록없이 이러한 종류의 애니메이션을 정의하는 방법이 있으며 솔루션에서 이와 같은 작업을 수행해야합니다. 나는 데이터 저장소가 그를 어떻게 돕는 지 보지 못하기 때문에 OP가 그의 문제를 해결할 수 있도록 돕고 자 노력했다. –