【问题标题】:UISlider Thumb Animation in iphone sdkiphone sdk 中的 UISlider 拇指动画
【发布时间】:2016-03-05 01:45:10
【问题描述】:

如何在 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 滑块拇指图像。 麻我。 谢谢...

【问题讨论】:

  • 您要对滑块的拇指图像应用什么动画?如果您想简单地移动滑块上的拇指图像,请使用 UISlider 的 setValue:animated: 方法。如果没有,我需要详细说明您究竟要如何获取拇指图像。
  • 上下移动 20 个像素的动画。
  • 假设您还没有解决这个问题,您是否尝试在拇指图像静止时、当用户沿着滑块主动移动拇指图像时或两者都设置动画?

标签: ios iphone ios7 ios6 uislider


【解决方案1】:

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

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

但是,一旦拇指处于非居中位置,您就会反对这样一个事实,即无法获得 UISlider 的轨道大小,并且轨道大小小于 UISlider 的 frame.size。宽度乘以 Apple 实现中隐藏的某个数量/因子/幻数。

我想到的两种方法如下:

  1. 响应 UISlider UIControlEventValueChanged 通知并重新计算覆盖 UISlider 拇指图像的 UIImageView 的位置。但是,如果您基于 UISlider 的 frame.size.width 进行此计算,则一旦您离开中心位置,默认拇指和 UIImageView 之间就会开始出现偏移。离中心越远,这个偏移就越大,当你回到中心时,它会返回 0(完全对齐)。
  2. 让 UIImageView 独立响应触摸事件。但是,和以前一样,由于无法获取 UISlider 的轨道大小,虽然您可以将 UIImageView 锁定为初始 y 值并让它沿 x 移动,但无法知道最大或最小 x 值是多少.

在任何一种情况下,您都可以跟踪并错误地获取 UISlider 的帧宽度和轨道宽度之间的差异值,该值可能适用于给定 iOS 版本中的给定情况,但不能保证另一种情况或更新不会破坏这一点。

如果这是必要的,我的解决方案是创建我自己的 UISlider 版本作为允许此类事情的 UIControl 的子类。

【讨论】:

  • 谢谢,目前我确实喜欢你所说的,但我正在寻找,有什么办法可以解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多