0

解決済み:私は完全な馬鹿です。以前は、1 つのボタンのイメージを変更するのではなく、2 つのボタン (再生と一時停止) を使用して非表示にしていました。私はばかげてこのコード行を見落としていました: playButton.hidden = YES.

カスタムMPMoviePlayerControllerコントロールを構築しています。pause.pngボタンの画像をwhenに設定しようとしていますMPMoviePlaybackState == MPMoviePlaybackStatePlaying。それ以外の場合は、に設定する必要がありplay.pngます。このステートメントは、同じメソッド currentPlaybackTimeが に設定された状態で 0.5 秒ごとに実行されUILabelます。

何らかの理由で、 に設定されませんpause.png。ボタンが消えるだけです。ただし、状態は正しくログPlayingに記録されます。not playing

.h

@property (retain) UIImage *playBtnBG;
@property (retain) UIImage *pauseBtnBG;

.m

- (void)viewDidLoad
{
playBtnBG = [UIImage imageNamed:@"play.png"];
pauseBtnBG = [UIImage imageNamed:@"pause.png"];
}


- (void)updatePlaybackTime:(NSTimer*)theTimer 
{
if (!sliding) {
    int playbackTime = moviePlayer.currentPlaybackTime; 

    timeLabel.text = [NSString stringWithFormat:@"%d:%02d", (playbackTime / 60), (playbackTime % 60)];
    playbackSlider.value = playbackTime;
}

if (moviePlayer.playbackState == MPMoviePlaybackStatePlaying) {
    NSLog(@"Playing");
[playButton setImage:pauseBtnBG forState:UIControlStateNormal];
}
else {
    NSLog(@"not playing");
    [playButton setImage:playBtnBG forState:UIControlStateNormal];

}
}
4

2 に答える 2

0

1つの可能性は、xibsからボタンを作成している場合、ボタンをファイル所有者に接続していないことです。これを試して楽しんでください:

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self 


                                        selector:@selector(moviePlayerPlaybackStateDidChange:) 
                                             name:MPMoviePlayerPlaybackStateDidChangeNotification 
                                           object:nil];

//myPlayer is MPMoviePlayerController declared in header
myPlayer =  [[MPMoviePlayerController alloc] initWithContentURL:myaudioUrl];
myPlayer.controlStyle = MPMovieControlStyleNone; 
[myPlayer prepareToPlay];
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(moviePlayerLoadStateChanged:) 
                                             name:MPMoviePlayerLoadStateDidChangeNotification 
                                           object:nil];
}

- (void) moviePlayerLoadStateChanged:(NSNotification*)notification {
     if ([myPlayer loadState] != MPMovieLoadStateUnknown) {
    [[NSNotificationCenter  defaultCenter] removeObserver:self 
                                                     name:MPMoviePlayerLoadStateDidChangeNotification 
                                                   object:nil];
    [myPlayer play];
}

}

-(void) moviePlayerPlaybackStateDidChange:(NSNotification*)notification {

NSLog(@"playbackDidChanged");
MPMoviePlayerController *moviePlayer = notification.object;
MPMoviePlaybackState playbackState = moviePlayer.playbackState;
if(playbackState == MPMoviePlaybackStateStopped) {
    NSLog(@"MPMoviePlaybackStateStopped");
} else if(playbackState == MPMoviePlaybackStatePlaying) {
    NSLog(@"MPMoviePlaybackStatePlaying");
 [playButton setImage:pauseBtnBG forState:UIControlStateNormal];
} else if(playbackState == MPMoviePlaybackStatePaused) {
    NSLog(@"MPMoviePlaybackStatePaused");
[playButton setImage:playBtnBG forState:UIControlStateNormal];
} 
}
于 2012-06-14T17:18:52.260 に答える
0

setBackground:おそらくメソッドを使用してみてください。

[playButton setBackgroundImage:pauseBtnBG forState:UIControlStateNormal];
于 2012-06-14T17:19:50.853 に答える