2013-07-30 39 views
1

我正在制作一个应用程序,我必须在单个屏幕中显示3个图像,并且当用户触摸一个图像时,该图像应该通过动画和调整大小显示。因此,对于第1步目标中的动画蒙版C

我做了遮蔽3个图像的3个不同的透明遮罩图片来自 How to Mask an UIImageView

而且我的方法是像下面

- (UIImageView*) maskedImage:(UIImage *)image withMasked:(UIImage *)maskImage { 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
    CALayer *mask1 = [CALayer layer]; 
    mask1.contents = (id)[maskImage CGImage]; 
    mask1.frame = CGRectMake(0, 0, 1024, 768); 
    imageView.layer.mask = mask1; 
    imageView.layer.masksToBounds = YES; 
    return imageView; 
} 

我打电话来这是

self.image2 = [UIImage imageNamed:@"screen2Full.png"]; 
    self.mask2 = [UIImage imageNamed:@"maskImage.png"]; 
    self.imageView2 = [self maskedImage:self.image2 withMasked:self.mask2]; 
    [self.completeSingleView addSubview:self.imageView2]; 

这是完美的工作。

现在进行第2步。为面具设置动画,以便显示完整图像。我在这方面搜索了很多,但没有取得成功。所以请帮助我。我只想知道我们该如何动画和调整蒙版图像的大小以便我可以查看完整的图像。我的概念如下。

enter image description here

回答

0

所以最后我得到了来自多个站点和一些自己的逻辑和勤奋的解决方案明显)。因此,这里是这个

-(void)moveLayer:(CALayer*)layer to:(CGPoint)point 
{ 
    // Prepare the animation from the current position to the new position 
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; 
    animation.fromValue = [layer valueForKey:@"position"]; 
    animation.toValue = [NSValue valueWithCGPoint:point]; 
    animation.duration = .3; 
    layer.position = point; 

    [layer addAnimation:animation forKey:@"position"]; 
} 

-(void)resizeLayer:(CALayer*)layer to:(CGSize)size 
{ 
    CGRect oldBounds = layer.bounds; 
    CGRect newBounds = oldBounds; 
    newBounds.size = size; 
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds"]; 

    animation.fromValue = [NSValue valueWithCGRect:oldBounds]; 
    animation.toValue = [NSValue valueWithCGRect:newBounds]; 
    animation.duration = .3; 
    layer.bounds = newBounds;  
    [layer addAnimation:animation forKey:@"bounds"]; 
} 

- (UIImageView*) animateMaskImage:(UIImage *)image withMask:(UIImage *)maskImage width:(int)wd andHeight:(int)ht andSize:(CGSize)size andPosition:(CGPoint)pt { 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; 
    CALayer *mask = [CALayer layer]; 
    mask.contents = (id)[maskImage CGImage]; 
    mask.frame = CGRectMake(0, 0, wd, ht); 

    //This needs to be place before masking. I don't knwo why. But its working :) 
    [self resizeLayer:mask to:size]; 
    [self moveLayer:mask to:pt]; 

    imageView.layer.mask = mask; 
    imageView.layer.masksToBounds = YES; 
    return imageView; 
} 

你只需要调用这是

[self.imageView1 removeFromSuperview]; 
self.imageView1 = [self animateMaskedImage:self.image1 withMasked:self.mask1 width:1024 andHeight:768 andSize:CGSizeMake(1024*4, 768*4) andPosition:CGPointMake(1024*2, 768*2)]; 
[self.completeSingleView addSubview:self.imageView1]; 
解决方案