我想在用戶第一次進入應用程序時(指示點擊什麼)在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