2011-03-16 49 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.