2010-02-16 188 views
1

我想問問什麼是實現以下用於iPhone的可可編碼的最佳方式。自定義播放暫停按鈕Iphone

作爲一種學習練習,我想製作一個非常簡單的MP3播放器。目前我最感興趣的部分是該播放器的自定義視覺組件。

特別是我將如何使用鼠標懸停和mousedown狀態製作自定義播放暫停按鈕?

另外,我希望根據播放/暫停按鈕顯示其播放或暫停狀態來打開和關閉「抽屜」。

當玩遊戲時,按鈕圖標變爲暫停圖標,並且抽屜滑動打開。暫停時,暫停圖標變爲播放圖標,抽屜關閉。

我應該看石英嗎?

回答

2

不需要使用Quartz。

UIButton開始。如果要定製突出顯示時的外觀(setImage:forState:),您只能將一個圖像分配給一個按鈕(並且它將處理突出顯示)或爲每個按鈕狀態分配不同的圖像。要實現播放和暫停之間的切換效果,只需輕按按鈕的圖像(在您的操作中爲UIControlEventTouchUpInside),就應該更換該按鈕的圖像。

對於抽屜動畫,創建一個UIView作爲抽屜並將其添加到您的主視圖。調整其框架,使其置於屏幕外。然後,當你想它動畫在屏幕上,用一個簡單的動畫塊:

[UIView beginAnimations:nil context:nil]; 
drawerView.center = CGPointMake(...); // set coordinate to the end position 
[UIView commitAnimations]; 

嘗試在文檔中的所有這一切閱讀起來。如果您仍然有問題,請提出更具體的問題。

+0

這是一個很好的起點點。你拯救了我很多吠叫錯誤的樹時間 – dubbeat 2010-02-16 12:37:30

1

我已經採納了您的建議並訪問了開發人員參考中心。改變播放暫停暫停按鈕的狀態一直很輕鬆。

但是,將我的面板子視圖添加到我的UIVIEWController和動畫對我來說非常困難(objective-c新手)。

首先,當我試圖讓我的面板視圖我得到警告說,面板UIView may not respond to initWithFrame. (initwithframe is a function of UIView ?)

其次我不能將圖像添加到我的面板的UIView。我收到警告說:

warning: passing argument 1 of 'addSubview:' from distinct Objective-C type 

最後嘗試應用動畫我的面板時,我得到的錯誤說

的UIView -commitAnimations‘和任何其他動畫相關的方法我嘗試添加」可能不響應’。

你能幫忙嗎?我認爲主要是我不明白爲什麼我得到這些「可能無法響應方法」警告,因爲我正在調用正確類型的方法(或我認爲)

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // SET UP THE PLAY PAUSE BUTTON 
    playPause = [UIButton buttonWithType:UIButtonTypeCustom]; 
    playPause.frame = CGRectMake(-20,280, 100,100); 
    [playPause setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; 
    [playPause addTarget:self action:@selector(buttonPushed:) 
     forControlEvents:UIControlEventTouchUpInside]; 
    playing=NO; 

    //SET UP THE AUDIO PLAYER 
    NSLog(@"Set up theAudio"); 
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/DumpTheChump.mp3", [[NSBundle mainBundle] resourcePath]]]; 
    NSError *error; 
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
    audioPlayer.numberOfLoops = -1; 

    //SETUP THE BOTTOM part of the PANEL 
    UIImage *panelBottomImage=[UIImage imageNamed:@"panel_bottom.png"]; 
    panelBottom=[UIView initWithFrame:(CGRectMake(-20, 280, 285, 128))]; 
    [panelBottom addSubview:panelBottomImage]; 

    //SETUP THE TOP PART OF THE PANEL. (THE ONE THAT SHOULD SLIDE UP AND DOWN) 

    UIImage *panelTopImage=[UIImage imageNamed:@"panel_top.png"]; 
    panelTop=[UIView initWithFrame:(CGRectMake(-20, 280, 285, 128))]; 
    [panelTop addSubview:panelTopImage]; 


    [self.view addSubview:panelBottom]; 
    [self.view addSubview:panelTop]; 
    [self.view addSubview:playPause]; 

// 285*128 

} 

- (void) buttonPushed:(id)sender 
{ 
    NSLog(@"It works!"); 

    switch (playing) { 
     case NO: 
      playing=YES; 
      [audioPlayer play]; 
      [playPause setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal]; 
      [panelTop beginAnimations:nil context:nil]; 
      [panelTop setAnimationDuration:2]; 
      [panelTop setAnimationDelegate:self]; 
      //UIView setAnimationDidStopSelector:@selector(onAnimationC omplete:finished:context; 

      // set the position where button will move to 
      panelTop.frame = CGRectMake(-20, 100, 285, 128);  

      [panelTop commitAnimations]; 
      break; 
     case YES: 
      playing=NO; 
      [audioPlayer pause]; 
       [playPause setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; 
      [playPause setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal]; 
      [panelTop beginAnimations:nil context:nil]; 
      [panelTop setAnimationDuration:2]; 
      [panelTop setAnimationDelegate:self]; 
      //UIView setAnimationDidStopSelector:@selector(onAnimationC omplete:finished:context; 

      // set the position where button will move to 
      panelTop.frame = CGRectMake(-20, 280, 285, 128);  

      [panelTop commitAnimations]; 

      break; 
     default: 
      break; 
    } 
}