【问题标题】:Customize UISlider (track image height)自定义 UISlider(跟踪图像高度)
【发布时间】:2011-11-04 22:36:34
【问题描述】:

我正在自定义 UISlider。我可以设置一个高于通常拇指的自定义拇指图像,但是在设置更高的最小轨道图像时我无法使轨道更高,但轨道高度保持不变。 应该有可能,因为在 iPad 上的 iPod/Music App 中,音量滑块也比通常的滑块更高,您可以在此处看到:


(来源:cocoia.com

【问题讨论】:

    标签: iphone ios cocoa-touch uislider


    【解决方案1】:

    您需要将滑块子类化并覆盖trackRectForBounds: 方法,如下所示:

    - (CGRect)trackRectForBounds:(CGRect)bounds
    {
        return bounds;
    }
    

    【讨论】:

      【解决方案2】:

      Swift 最简单的解决方案:

      class TBSlider: UISlider {
      
          override func trackRectForBounds(bounds: CGRect) -> CGRect {
              return CGRectMake(0, 0, bounds.size.width, 4)
          }
      }
      

      【讨论】:

        【解决方案3】:

        对于那些希望看到一些更改轨道大小的工作代码的人。

        class CustomUISlider : UISlider
        {        
            override func trackRectForBounds(bounds: CGRect) -> CGRect {
                //keeps original origin and width, changes height, you get the idea
                let customBounds = CGRect(origin: bounds.origin, size: CGSize(width: bounds.size.width, height: 5.0))
                super.trackRectForBounds(customBounds)
                return customBounds
            }
        
            //while we are here, why not change the image here as well? (bonus material)
            override func awakeFromNib() {
                self.setThumbImage(UIImage(named: "customThumb"), forState: .Normal)
                super.awakeFromNib()
            }
        }
        

        唯一剩下的就是改变故事板中的类:

        您可以继续使用您的搜索栏操作和出口到对象类型 UISlider,除非您想向滑块添加更多自定义内容。

        【讨论】:

          【解决方案4】:

          使用下一个方法setThumbImagesetMinimumTrackImagesetMaximumTrackImage

          [self setThumbImage:[UIImage imageNamed:@"switchThumb.png"] forState:UIControlStateNormal];
              [self setMinimumTrackImage:[UIImage imageNamed:@"switchBlueBg.png"] forState:UIControlStateNormal];
              [self setMaximumTrackImage:[UIImage imageNamed:@"switchOffPlain.png"] forState:UIControlStateNormal];
          

          并像这样创建子类

          - (id) initWithFrame: (CGRect)rect{
              if ((self=[super initWithFrame:CGRectMake(rect.origin.x,rect.origin.y,90,27)])){
                  [self awakeFromNib];
              }
              return self;
          }
          

          【讨论】:

          • 奇怪,可能我不明白你想要什么?
          • 再一次,在这里不起作用。我猜提供的代码只是iOS5? (我用的是iOS4,有一些UISlider只有iOS5)
          【解决方案5】:
          //use this code
          
           UIImage *volumeLeftTrackImage = [[UIImage imageNamed: @"video_payer_scroll_selection.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
                  UIImage *volumeRightTrackImage= [[UIImage imageNamed: @"video_bar_bg.png"] stretchableImageWithLeftCapWidth: 9 topCapHeight: 0];
                  [volumeslider setMinimumTrackImage: volumeLeftTrackImage  forState: UIControlStateNormal];
                  [volumeslider setMaximumTrackImage: volumeRightTrackImage  forState: UIControlStateNormal];
                  [volumeslider setThumbImage:[UIImage imageNamed:@"sound_bar_btn.png"] forState:UIControlStateNormal];
                  [tempview addSubview:volumeslider];
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-10-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-20
            • 2015-10-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多