2013-03-02 1 views
0

Я хочу создать пользовательскую анимацию в iOS. Предположим, у меня есть отображение UIView с его SubViews.I хочу сделать снимок экрана и разбить его на четыре части, которые должны быть левым, правым, нижним, прямым и средним и перемещать каждую часть в их углы. Поскольку левый верх должен перемещаться в левый верхний угол UIView и правый верх должны перемещаться в правый верхний угол и так далее.Создавать пользовательские анимации в Objective-C?

ответ

0

Может быть, это один помогает вам, но не уверен, первый набор ваши позиции кадров после этого изменить положение кадров, что вы хотите, по умолчанию я везу

    top.frame=CGRectMake(0,0,320,120); 
       bottom.frame=CGRectMake(0,315,320,145); 
       left.frame=CGRectMake(0,113,151,202); 
       right.frame=CGRectMake(175,113,151,202); 

[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(tranform) userInfo:nil repeats:NO]; 

через 3 секунды этот метод позвонят,

-(void)tranform{ 
    [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationTransitionCurlUp 
        animations:^{ 
         top.frame=CGRectMake(0,-120,320,120); 
         bottom.frame=CGRectMake(0,480,320,145); 
         left.frame=CGRectMake(-151,113,151,202); 
         right.frame=CGRectMake(320,113,151,202); 



        } 
        completion:nil]; 
} 

в выше коде сверху, снизу, слева, справа, является четыре вида и я добавляю все те self.view и когда щелчок на конкретном, но анимация происходит относительно т наследуйте соответствующие рамки.

+0

любым способом спасибо, теперь я решил его – 2013-03-02 08:56:41

+0

я знаю, как для анимации, но я думаю, что вы не читали мой вопрос внимательно, что я want.I решил его, через 6 часов я буду загружать его – 2013-03-02 09:03:59

+0

здесь я «Принимая четыре изображения, которые делят одно полное изображение на четыре части, когда я нажимаю одну конкретную кнопку, эти четыре части перемещаются из центра в верхнюю, левую, правую и нижнюю с их соответствующими положениями. – Balu

0

Вот мой ответ, это будет скриншот текущего отображения экрана, который делит его на четыре равные части от центра и оживит его, чтобы перейти к соответствующим углам.

- (IBAction)animate:(id)sender 
{ 
    NSLog(@"animation called "); 
    UIGraphicsBeginImageContext(self.view.window.bounds.size); 
    [self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    CGImageRef imgref=[image CGImage]; 
    NSArray *arrayOfImages= [[NSArray alloc]initWithArray:[self splitImageIntoRects:imgref]]; 

    NSLog(@"array of images are %@",arrayOfImages); 


    for (CALayer *layer in arrayOfImages) { 
     [self.view.layer addSublayer:layer]; 
    } 

    [self animateLayers:arrayOfImages]; 
} 

-(void)animateLayers:(NSArray*)array 
{ 
    for (int i=0;i<array.count;i++) 
    { 
     CALayer *layer=[array objectAtIndex:i]; 
     CGRect rect=[layer frame]; 
     CGPoint newPt; 

     switch (i) { 
      case 0: 
       newPt=CGPointMake(-rect.size.width, -rect.size.height); 
       break; 
      case 1: 
       newPt=CGPointMake(rect.origin.x-rect.size.width, rect.origin.y+rect.size.height); 
       break; 
      case 2: 
       newPt=CGPointMake(rect.origin.x+rect.size.width, rect.origin.y-rect.size.height); 
       break; 
      case 3: 
       newPt=CGPointMake(rect.origin.x+rect.size.width, rect.origin.y+rect.size.height); 
       break; 
     } 
     [self moveLayer:layer to:newPt]; 
    } 
} 

-(void)moveLayer:(CALayer*)layer to:(CGPoint)point 
{ 
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; 
    animation.duration=1; 
    animation.fromValue = [layer valueForKey:@"position"]; 

    animation.toValue = [NSValue valueWithCGPoint:point]; 
    layer.position = point; 
    [layer addAnimation:animation forKey:@"position"]; 
} 

- (NSArray*)splitImageIntoRects:(CGImageRef)anImage{ 

    CGSize imageSize = CGSizeMake(CGImageGetWidth(anImage), CGImageGetHeight(anImage)); 

    NSMutableArray *splitLayers = [NSMutableArray array]; 

    int kXSlices = 2; 
    int kYSlices = 2; 

    for(int x = 0;x < kXSlices;x++) { 
     for(int y = 0;y < kYSlices;y++) { 
      CGRect frame = CGRectMake((imageSize.width/kXSlices) * x, 
             (imageSize.height/kYSlices) * y, 
             (imageSize.width/kXSlices), 
             (imageSize.height/kYSlices)); 

      CALayer *layer = [CALayer layer]; 
      layer.frame = frame; 
      CGImageRef subimage = CGImageCreateWithImageInRect(anImage, frame); 
      layer.contents = (__bridge id)subimage; 
      CFRelease(subimage); 
      [splitLayers addObject:layer]; 
     } 
    } 

    return splitLayers; 
} 
Смежные вопросы