使用蒙版动画UIImageView但是蒙版是静态的

时间:2014-10-10 23:34:28

标签: objective-c animation uiimageview mask cabasicanimation

我正在尝试制作一个动画,其中蒙版放置在视图的中心。出现在面具后面传递的任何图像视图。所以这是我的代码到目前为止,但这段代码的问题在于它使用图像视图为蒙版设置动画。

UIView *maskView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.worldImageView.frame.size.height, self.worldImageView.frame.size.height)];

// ...position maskView...
maskView.layer.position = CGPointMake(CGRectGetMidX([self.view bounds]), CGRectGetMidY([self.view bounds]));

maskView.layer.backgroundColor = [UIColor blackColor].CGColor;

maskView.layer.cornerRadius = 90;

self.worldImage = [[UIImageView alloc] init];
self.worldImage.frame = self.worldImageView.frame;
self.worldImage.image = [UIImage imageNamed:@"continents.png"];
[maskView addSubview:self.worldImage];

[self.view addSubview:maskView];

CABasicAnimation* worldAnimation = [[CABasicAnimation alloc] init];
[worldAnimation setFromValue:[NSValue valueWithCGPoint:CGPointMake(self.view.frame.size.width + 50, CGRectGetMidY([maskView bounds]))]];
[worldAnimation setToValue:[NSValue valueWithCGPoint:CGPointMake(-50, CGRectGetMidY([maskView bounds]))]];
worldAnimation.keyPath = @"position";
worldAnimation.duration = 6.0f;
worldAnimation.repeatCount = HUGE_VALF;
[[self.worldImage layer] addAnimation:worldAnimation forKey:nil];

我不知道我是否解释得这么好。如果您需要更多信息,请告诉我。提前谢谢!

1 个答案:

答案 0 :(得分:2)

此处的问题是,mask的{​​{1}}属性附加到UIView - 它们无法单独移动。从技术上讲,它实际上附加到视图的底层,但无论如何。

如果您希望图像看起来像是在圆形窗口前面传递(这样您就可以看到它),您需要将其添加为带有蒙版的视图的子视图。所以,你可能会这样做:

UIView

请注意,我只是在UIView *maskView = [[UIView alloc] init]; // ...position maskView... maskView.layer.cornerRadius = 90; maskView.clipsToBounds = YES; self.worldImage = [[UIImageView alloc] init]; self.worldImage.frame = self.worldImageView.frame; self.worldImage.image = [UIImage imageNamed:@"continents.png"]; [maskView addSubview:self.worldImage]; [self.view addSubview:maskView]; // ...animate worldImage back and forth... 上放置圆角而不是使用CAShapeLayer;因为你想要一个圆形面具,这是一个更简单的技巧。此外,在动画maskView时,请考虑使用worldImage基于块的动画方法之一 - 对于像这样的简单内容,它们更容易处理。