2011-03-16 47 views
0

我有一個應用程序有一個開始按鈕(與播放圖像)。一旦開始按鈕被點擊,下一次點擊應該像一個暫停按鈕(也是按鈕圖像的改變)。我們怎樣才能實現這個功能與圖像改變一個用於播放和另一個用相同的按鈕暫停?如何創建雙功能按鈕?

+0

你有問題嗎? – 2011-03-16 12:15:27

回答

1
- (IBAction)buttonClicked:(id)sender 
{ 

UIButton *button = (UIButton *)sender; 
[button setImage:pauseImage forState:state]; 
//Do things 
} 
+0

sory。我的問題是我們如何實現這個功能與圖像改變一個玩和另一個用同一個按鈕暫停? – sarath 2011-03-16 12:20:19

+2

將布爾值保持爲global.Set將其設置爲開始時的一個,將其設置爲零時點擊按鈕等等。每次點擊按鈕時,檢查布爾是否設置。如果設置按鈕打開,並把圖像爲打開,反之亦然 – humblePilgrim 2011-03-16 12:26:49

0

試試這個

-(void)playClicked:(id)sender{ 

UIButton *tappedButton = (UIButton*)sender; 

if([tappedButton.currentImage isEqual:[UIImage imageNamed:@"play.png"]]) { 
    [sender setImage:[UIImage imageNamed: @"pause.png"] forState:UIControlStateNormal]; 
} 

else { 
    [sender setImage:[UIImage imageNamed:@"play.png"]forState:UIControlStateNormal]; 
} 
} 

所有最優秀的。

+0

很好回答...謝謝你 – sarath 2011-03-16 12:35:10

+0

只是出於好奇,不會檢查平等像兩幅圖像之間的CPU會很重?它比較某種散列或他們的路徑或什麼? – 2011-03-16 12:39:50

0

我會在點擊方法中有一個布爾值,如果它已經播放或不播放,它將保持跟蹤。如果不是正在播放,請將其啓動並將圖像設置爲暫停圖像,如果正在播放,則再次按下該按鈕即可執行所需操作,即暫停和更改圖像。

這個循環會在點擊方法:

if(playing) { 
    //if the button is pressed and its already playing, pause or do whatever here 
    [button setImage:startImage forState:normal]; 
    playing = NO; 
} else { 
    [button setImage:pauseImage forState:normal]; 
    playing = YES; 
} 
4

這是怎麼我會處理這件事

在你的viewController定義中定義布爾

BOOL playing; 

然後在按鈕您應該採取類似行動

-(IBAction)playPauseButtonClicked:(id)sender 
{ 
    if (playing) 
    { 
     [self pauseButtonClicked]; 
    } 
    else 
    { 
     [self playButtonClicked]; 
    } 

    UIButton *theButton = (UIButton *)sender; 

    playing = !playing; 
    [theButton setImage:playing ? @"pauseImage.png":@"playImage.png" forState:UIControlStateNormal]; 
} 

-(void)pauseButtonClicked 
{ 
    // Handle pausing 
} 
-(void)playButtonClicked 
{ 
    // Handle starting to play 
} 
1

全球BOOL沒有必要。只需設置圖像爲UIControlStateSelected(即播放),另一個是UIControlStateNormal(即暫停),並在你的操作方法:

-(IBAction)buttonAction:(id)sender{ 
    if ([sender isKindOfClass:[UIButton class]]) 
    { 
     UIButton *button = sender; 
     button.selected = !button.selected; 
     if (button.selected) 
      // Play 
     else //Pause 
    } 
+0

好的。正是我想到的。你擊敗了我。 :) – visakh7 2011-03-16 12:42:04

+0

不錯,但個人而言,我不喜歡直接依靠用戶界面/視圖對象的屬性來弄清楚程序的狀態。如果我不想將狀態保存在一個變量中,我會使用a @ bool @property並檢查getter中的「selected」屬性按鈕,以便能夠輕鬆地更改條件,因爲我很容易看到OP的應用程序取決於播放/不播放狀態在其他地方的程序以及... – 2011-03-16 12:53:32

0
Here is my code. Have a look. 

    @IBAction func playAndPauseButtonClicked(sender: AnyObject) { 
      let skView = self.view as! SKView 
      skView.scene!.paused = true 

      if (playAndPauseButton.currentImage == UIImage(named: "play.png")) 
      { 
       playAndPauseButton.setImage(UIImage(named: "pause.png"), forState: UIControlState.Normal) 
      } 
      else 
      { 
       playAndPauseButton.setImage(UIImage(named: "play.png"), forState: UIControlState.Normal) 
       skView.scene!.paused = false 
      } 

     } 

Note: I used this in a sample game where I have button which pause and play the game scene.