1

私は持っている:

 MPMusicPlayerController *musicPlayer = [MPMusicPlayerController iPodMusicPlayer];

アプリを使っているときはアラームを鳴らすために音楽を小さくする必要があり、それが消えたら元の音量に戻したいです。ここの musicVolume は、フェード前のボリューム レベルを格納する double です。

musicVolume = musicPlayer.volume;
if (musicPlayer.playbackState == MPMusicPlaybackStatePlaying)
    [self fadeMusicOut];

これにより、音楽がうまくフェードアウトします。

フェードインするには:

    - (void) fadeMusicIn
    {
            [musicPlayer play];
            musicPlayer.volume += 0.05;
            if (musicPlayer.volume < musicVolume)
                [self performSelector: @selector(fadeMusicIn) 
                           withObject: nil 
                           afterDelay: 0.1 ];
            else 
            {

            }
    }

これにより、音楽がフェードインされますが、以前に設定された音量よりも常に音量が上がります。

元の音量に戻すにはどうすればよいですか? 前もって感謝します。

4

1 に答える 1

3

がと等しいかそれ以上になると、どちらが基本的にメソッドの呼び出し、または if ステートメントで呼び出されるメソッドをif (musicPlayer.volume < musicVolume)停止していると言っています。しかし、あなたはそれが等しいことを望んでいます。だから試してください:performSelector: withObject: afterDelay:musicPlayer.volumemusicVolume

- (void) fadeMusicIn
{
    ...
        if (musicPlayer.volume == musicVolume)
            [self performSelector: @selector(fadeMusicIn) 
                       withObject: nil 
                       afterDelay: 0.1 ];
    ...
}

このように、 if ステートメントmusicPlayer.volumeはより小さいか等しい場合に停止するため、等しくなると停止します

更新して、代わりに == を試してください

于 2012-05-12T23:33:11.723 に答える