我想在用户第一次进入应用程序时(指示点击什么)在UISlider的动画(闪烁)拇指。可以对UISlider的UIImage Thumb进行动画制作吗?
我设置的UIImage作为一个拇指:
[self.textNavigationSlider setThumbImage:thumbImage forState:UIControlStateNormal];
我可以采用某种动画它(也许只是改变这个UIImage的动画的阿尔法)?
PS(此播放按钮是UIImage的)
我想在用户第一次进入应用程序时(指示点击什么)在UISlider的动画(闪烁)拇指。可以对UISlider的UIImage Thumb进行动画制作吗?
我设置的UIImage作为一个拇指:
[self.textNavigationSlider setThumbImage:thumbImage forState:UIControlStateNormal];
我可以采用某种动画它(也许只是改变这个UIImage的动画的阿尔法)?
PS(此播放按钮是UIImage的)
我不相信你可以为图像的alpha值设置动画,并且我们无法访问拇指的图像视图(如果有的话)来动画它的alpha。你可以做的一件事是添加一个图像视图作为滑块的子视图,并使其略大于拇指图像,并为其alpha值设置动画(它将位于拇指图像后面,因此它将显示为一个脉动环)。在这个例子中,我设置图像视图在thumbRectForBounds框架:trackRect:值:和取消的touchesBegan动画,
@interface RDSlider()
@property (strong, nonatomic) UIImageView *iv;
@end
@implementation RDSlider // subclass of UISlider
-(void)awakeFromNib {
self.minimumTrackTintColor = [UIColor colorWithRed:75/255.0 green:180/255.0 blue:150/255.0 alpha:1];
self.maximumTrackTintColor = [UIColor colorWithRed:50/255.0 green:120/255.0 blue:100/255.0 alpha:1];
[self setThumbImage:[self createThumbImage] forState:UIControlStateNormal];
self.iv = [UIImageView new];
self.iv.backgroundColor = [UIColor greenColor];
[self addSubview:self.iv];
}
-(void)didMoveToWindow {
[UIView animateWithDuration:.6 delay:0 options:UIViewAnimationOptionAutoreverse|UIViewAnimationOptionTransitionCrossDissolve|UIViewAnimationOptionRepeat|UIViewAnimationOptionCurveEaseInOut animations:^{
self.iv.alpha = 0;
} completion:^(BOOL finished) {
[self.iv removeFromSuperview];
self.iv = nil;
}];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.iv.layer removeAllAnimations]; // calling this causes the animation's completion block to be executed
[super touchesBegan:touches withEvent:event];
}
- (CGRect)thumbRectForBounds:(CGRect)bounds trackRect:(CGRect)rect value:(float)value {
CGRect thumbRect = [super thumbRectForBounds:bounds trackRect:rect value:value];
self.iv.frame = CGRectInset(thumbRect,-2,-2);
self.iv.layer.cornerRadius = self.iv.frame.size.width/2.0;
self.iv.layer.masksToBounds = YES;
return thumbRect;
}
-(UIImage *) createThumbImage {
UIBezierPath *border = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 28, 28)];
UIBezierPath *center = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(.5, .5, 27, 27)];
UIGraphicsBeginImageContextWithOptions(CGSizeMake(border.bounds.size.width, border.bounds.size.height), NO, 0.0);
[self.minimumTrackTintColor setFill];
[border fill];
[[UIColor whiteColor] setFill];
[center fill];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
如果你想为一个时间按照以下步骤。
创建新的UIImageView让我们说fakeImageView。
使用UIViewAnimation
动画它一旦动画完成,隐藏...(fakeImageView.hidden = YES)
这是很不错的方式。不是非常可定制的,但很好的黑客。谢谢。 – 2014-12-07 19:33:56
@PaulBrewczynski:我发现很少有人将任何问题的答案标记为接受的答案......如果您将答案标记为已接受,如果该答案解决了您的问题,那将是非常好的...... **这就是SO的工作原理...... ** – 2014-12-08 06:35:12
你可以使滑块的精确副本,除了没有拇指图像,并把它在第一个下面。然后制作整个第一个滑块的alpha值,理论上应该给人以仅用拇指动画的印象;-)当动画完成时,您可以删除第二个滑块。
您可以访问UISlider object.subviews。通常(不保证)第三个元素(应该是.lastObject)是拇指图像的UIImageView。
当我试图从StoryBoard设置这个子视图时,didMoveToWindow似乎在显示视图之前被执行,并且我立即调用完成块。 (我刚刚创建了公共方法 - startBlinking) – 2014-12-08 00:29:13
@PaulBrewczynski,我不知道那是为什么。我的测试应用程序在故事板中有滑块,并且工作正常。你有没有和我一样的动画方法有相同的选项?你现在有工作吗(用你的公开方法)? – rdelmar 2014-12-08 00:52:07