2016-01-23 45 views
-1

我想创建自定义活动指示器它有两个图像一个图像将静态(在后台),另一个图像将在前面,它必须移动左,右,上,下(只是为了给动画感觉)。我试图使用下面的代码(其错误的一个)。任何人都可以帮助我,如何做动画iOS:自定义活动指示器

UIImage *statusImage = [UIImage imageNamed:@"image1.png"]; 
UIImageView *activityImageView = [[UIImageView alloc] 
            initWithImage:statusImage]; 


//Add more images which will be used for the animation 
activityImageView.animationImages = [NSArray arrayWithObjects: 
            [UIImage imageNamed:@"image1.png"], 
            [UIImage imageNamed:@"image2.png"], nil]; 


//Set the duration of the animation (play with it 
//until it looks nice for you) 
activityImageView.animationDuration = 7; 

activityImageView.frame = CGRectMake(
            self.view.frame.size.width/2 
            -statusImage.size.width/3, 
            self.view.frame.size.height/2 
            -statusImage.size.height/3, 
            statusImage.size.width/3, 
            statusImage.size.height/3); 

//Start the animation 
[activityImageView startAnimating]; 
+0

PLZ不与图像发起的ImageView '[[UIImageView的页头] initWithImage:statusImage]' 尝试与框架或仅初始化启动。 –

+0

@RatulSharker为什么不呢?你想说什么? –

回答

0

UIImageView可以通过图像动画,有点像一个gif。使用CAAnimation可以更加优雅地实现你想要的东西。此代码给你展示了一个动画,左,右:

- (CATransform3D) moveToRight 
{ 
    return [self moveWithScale:CGSizeMake(0.25f, 1.5f)]; 
} 
- (CATransform3D) moveToLeft 
{ 
    return [self moveWithScale: CGSizeMake(-0.25f, 1.5f)]; 
} 
- (CATransform3D) moveWithScale: (CGSize) scale 
{ 
    CGAffineTransform scaleTransform CGAffineTransformMakeScale(ABS(scale.width), scale.height); 
    CGFloat XTranslationFactor = (1.0f - ABS(scale.width))/2.0 * (ABS(scale.width)/scale.width); 

    CGAffineTransform translationTransform = CGAffineTransformMakeTranslation(XTranslationFactor * self.bounds.size.width, 
                      0.0f); 
    CGAffineTransform completeTransform = CGAffineTransformConcat(scaleTransform, translationTransform); 

    CATransform3D transform3D = CATransform3DMakeAffineTransform(completeTransform); 
    return transform3D; 
} 
- (NSArray *) keyFrameAnimationValues 
{ 
    values = @[[NSValue valueWithCATransform3D: [self moveToLeft]], 
       [NSValue valueWithCATransform3D: [self moveToRight]], 
       [NSValue valueWithCATransform3D: [self moveToTop]], 
       [NSValue valueWithCATransform3D: [self moveToBottle]] 
       ]; 
} 

- (void) startAnimating 
{ 
    NSArray * values = [self keyFrameAnimationValues]; 
    NSInteger frameCount = frameValues.count; 
    CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath: @"transform"]; 
    keyFrameAnimation.duration = 7; 
    keyFrameAnimation.calculationMode = kCAAnimationCubic; 
    keyFrameAnimation.values = [self keyFrameAnimationValues]; 
    // this next part could be done a little more generic 
    // by constructing the array dynamically using a for loop, 
    // but this will give you an idea 
    keyFrameAnimation.keyTimes = @[@(1.0f/frameCount), 
            @(2.0f/frameCount), 
            @(3.0f/frameCount), 
            @(4.0f/frameCount) 
           ]; 
    keyFrameAnimation.repeatCount = HUGE_VALF; 
    [self.layer addAnimation: keyFrameAnimation forKey: @"myAnimation"]; 
} 
+0

此解决方案看起来可行,我会检查并找回给您 –

0

创建要在每个角落移动,并将其添加为定位对象层CAAnimation。希望它可以帮助