UISlider拇指动画在iphone sdk中

时间:2015-12-01 07:55:27

标签: ios iphone ios7 ios6 uislider

如何在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
                 }];

此动画为动画提供了完整的傻瓜。我的要求是仅动画onlu滑块拇指图像。 麻麻。 感谢...

1 个答案:

答案 0 :(得分:0)

我做了一些探测并编写了一些测试代码,我的结论是你无法为UISlider的拇指图像设置动画,除了以下情况之外:当拇指位于滑块的正中间而不是移动。

在这种情况下,您可以使用您选择的拇指图像制作UIImageView(因为您无法为UIImage制作动画)(您必须制作一个,从iOS 7开始无法获得指向默认拇指图像的指针+),将其作为UISlider上的子视图放在默认的拇指图像上,并为其设置动画。

但是,一旦拇指处于非居中位置,你就会对抗无法获得UISlider轨道大小的事实,并且轨道尺寸小于UISlider的frame.size。宽度乘以隐藏在Apple实现中的一些数量/因子/幻数。

我想到的两种方法如下:

  1. 响应UISlider UIControlEventValueChanged通知并重新计算UIImageView覆盖UISlider拇指图像的位置。但是,如果您将此计算基于UISlider的frame.size.width,则只要移开居中位置,默认拇指和UIImageView之间就会出现偏移。你偏离中心越远,这个偏移变得越大,当你回到中心时返回0(完全排列)。
  2. 让UIImageView独立响应触摸事件。但是,和以前一样,由于无法获得UISlider的轨道大小,而您可以将UIImageView锁定为初始y值并让它沿x移动,因此无法知道最大或最小x值是多少
  3. 在任何一种情况下,您都可以跟踪并错误地找到UISlider的帧宽和轨道宽度之间的差值,这可能适用于给定版本的iOS中的给定情况,但不能保证另一种情况或更新不会破坏它。

    我的解决方案,如果这是必不可少的,那就是创建我自己的UISlider版本作为UIControl的子类,允许这样的东西。