UISlider 滑塊控件


一、創建

滑塊是一個標准的UIControl。我們可以通過代碼創建,如同開關(UISwitch)的寬與高都會被忽略一樣滑塊的高也會被忽略(但是寬度不會):

  1. UISlider* mySlider = [ [ UISlider alloc ] initWithFrame:CGRectMake(20.0,10.0,200.0,0.0) ];//高度設為0就好    

二、設定范圍與默認值

創建完畢的同時我們要設置好滑塊的范圍,如果你沒有設置,那么會使用默認的 0.0 到 1.0 之間的值。UISlider提供了兩個屬性來設置范圍:mininumValue 和 maxinumValue:

  1. mySlider.mininumValue = 0.0;//下限   
  2. mySlider.maxinumValue = 50.0;//上限  

同時你也可以為滑塊設定一個默認值:

  1. mySlider.value = 22.0;  

三、兩端添加圖片

滑塊可以在任何一段顯示圖像。添加圖像后會導致滑動條縮短,所以記得要記得在創建的時候增加滑塊的寬度來適應圖像。

  1. [ mySlider setMininumTrackImage: [ UIImage applicationImageNamed:@"min.png" ] forState: UIControlStateNormal ];  
  2. [ mySlider setMaxinumTrackImage: [ UIImage applicationImageNamed:@"max.png" ] forState: UIControlStateNormal ];  

你可以根據滑塊的各種不同狀態顯示不同的圖像。下面是可用狀態:

UIControlStateNormal

UIControlStateHighlighted

UIControlStateDisabled

UIControlStateDisabled

UIControlStateSelected

四、顯示控件

  1. [ parentView addSubview:myslider ];//添加到父視圖   
  2. 或  
  3. [ self.navigationItem.titleView addSubview:myslider ];//添加到導航欄  

五、讀取控件值

  1. float value = mySlider.value;  

六、通知

要想在滑塊值改變時收到通知,可以用UIControl類的addTarget方法為UIControlEventValueChanged事件添加一個動作。

  1. [ mySlider addTarget:self action:@selector(sliderValueChanged:) forControlEventValueChanged ];  

只要滑塊停放(注意是停放,如果要在拖動中也觸發,請看后文)到新的位置,你的動作方法就會被調用:

  1. - (void) sliderValueChanged:(id)sender{  
  2.         UISlider* control = (UISlider*)sender;  
  3.         if(control == mySlider){  
  4.                   float value = control.value;  
  5.                    /* 添加自己的處理代碼 */  
  6.          }  
  7. }  

如果要在拖動中也觸發,需要設置滑塊的 continuos 屬性:

  1. mySlider.continuous = YES ;  

這 個通知最簡單的一個實例就是實時顯示滑塊的值,很奇怪的蘋果顯示滑塊的值是一個私有的API(setShowValue),私有就私有,大不了我不用就 是。我們可以用一個UILabel來顯示值,在每次觸發上面的方法時改變label的值,不就可以實時顯示了嗎?當然我們可以做的不僅僅是這個,還有更多 的 cool 事情可以去實現,就看你的手段與想象力了。

///////////////////////

如果您希望在App里引入音量調節功能,生成一個滑動條,用戶拖動該控件就能調節iPhone音量--可以用uislider + nstimer。

代碼

[[NSNotificationCenter defaultCenter] addObserver:self
      selector:@selector(volumeChanged:)
      name:@"AVSystemController_SystemVolumeDidChangeNotification"
      object:nil];


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM