提问人:Sudhakar 提问时间:12/1/2015 更新时间:12/8/2015 访问量:826
iphone sdk 中的 UISlider 拇指动画
UISlider Thumb Animation in iphone sdk
问:
如何在iphone sdk中为uislider拇指动画制作动画? 请在下面检查我的代码。
创建滑块
slider = [[UISlider alloc] initWithFrame:CGRectMake(0.0, 300.0, 320.0, 3.0)];
[[UISlider appearance] setThumbImage:[UIImage imageNamed:@"chnavigate-1.png"] forState:UIControlStateNormal];
UIImage *clearImage = [[UIImage imageNamed:@"png1.png"] stretchableImageWithLeftCapWidth:14.0 topCapHeight:0.0];
[slider setMinimumTrackImage:clearImage forState:UIControlStateNormal];
[slider setMaximumTrackImage:clearImage forState:UIControlStateNormal];
[slider addTarget:self
action:@selector(sliderAction:)
forControlEvents:UIControlEventValueChanged];
slider.minimumValue=0.0;
slider.maximumValue=3.6;
[slider setValue:0.0];
//slider.value = 0.1f;
[slider setContinuous:YES];
//slider.thumbTintColor=[UIColor redColor];
[slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
动画代码如下:
[UIView animateWithDuration:0.3 delay:1.3 usingSpringWithDamping:0.1 initialSpringVelocity:1.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
//Animations
slider.frame = CGRectMake(slider.frame.origin.x,slider.frame.origin.y - 20,slider.frame.size.width,slider.frame.size.height);
}
completion:^(BOOL finished) {
//Completion Block
}];
此动画为动画提供了完整的 silder。我的要求是仅对 onlu 滑块拇指图像进行动画处理。 给我发麻。 谢谢。。。
答:
0赞
paulmrest
12/8/2015
#1
我做了一些研究并编写了一些测试代码,我的结论是,除了以下一种情况外,您无法对 UISlider 的拇指图像进行动画处理:当拇指位于滑块的正中间并且不移动时。
在这种情况下,您可以使用您选择的拇指图像制作 UIImageView(因为您无法对 UIImage 进行动画处理)(您必须制作一个,从 iOS 7+ 开始无法获取指向默认拇指图像的指针),将其作为子视图放置在 UISlider 上的默认拇指图像上,并对其进行动画处理。
但是,一旦拇指处于非居中位置,您就会遇到这样一个事实,即无法获取 UISlider 的轨道大小,并且轨道大小小于 UISlider 的 frame.size.width 的某个数量/因子/幻数,这些数字隐藏在 Apple 的实现中。
我想到的两种方法如下:
- 响应 UISlider UIControlEventValueChanged 通知,并重新计算覆盖 UISlider 拇指图像的 UIImageView 的位置。但是,如果基于 UISlider 的 frame.size.width 进行此计算,则一旦离开中心位置,默认拇指和 UIImageView 之间就会开始出现偏移。偏离中心越远,此偏移量就越大,当您移回中心时,该偏移量将返回 0(完美对齐)。
- 让 UIImageView 独立响应触摸事件。但是,和以前一样,由于无法获取 UISlider 的轨道大小,虽然您可以将 UIImageView 锁定为初始 y 值并让它沿 x 移动,但无法知道最大或最小 x 值是多少。
无论哪种情况,您都可以跟踪并错误地得出 UISlider 的帧宽度与轨道宽度之间的差值,该值可能适用于给定版本的 iOS 中的给定情况,但不能保证其他情况或更新不会破坏它。
如果这是必不可少的,我的解决方案是创建我自己的 UISlider 版本作为 UIControl 的子类,允许这样的事情。
评论
0赞
Sudhakar
12/8/2015
谢谢,现在我确实喜欢你说的,但我正在寻找,有什么办法可以解决这个问题。
评论