3

ここでの最初の質問なので、質問の形式に誤りがある場合は事前にお詫び申し上げます。

音量を制御するために UISlider を配置したアプリに設定画面があります。MPVolumeView からこのスライダーを次のように取得しました。

- (UISlider *)getSystemVolumeSlider {
    UISlider *volumeSlider;
    UISlider *designTemplateSlider = [[UISlider alloc] init];
    ///////volume slider////////////////////////////////

    MPVolumeView *volumeView = [[MPVolumeView alloc] init];

    //get only the slider
    for (id current in volumeView.subviews){
        if ([current isKindOfClass:[UISlider class]]) {
            volumeSlider = (UISlider *)current;

            UIImage *minimumTrackImage = [[designTemplateSlider minimumTrackImageForState:UIControlStateNormal] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];
            [volumeSlider setMinimumTrackImage:minimumTrackImage forState:UIControlStateNormal];
            UIImage *maximumTrackImage = [[designTemplateSlider maximumTrackImageForState:UIControlStateNormal] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];
            [volumeSlider setMaximumTrackImage:maximumTrackImage forState:UIControlStateNormal];
            [volumeSlider setThumbImage:[designTemplateSlider thumbImageForState:UIControlStateNormal] forState:UIControlStateNormal];

            Method originalThumbRect = class_getInstanceMethod(NSClassFromString(@"MPVolumeSlider"),
                                                               @selector(thumbRectForBounds:trackRect:value:));
            Method newThumbRect = class_getInstanceMethod([CustomUISlider class],
                                                          @selector(thumbRectForBounds:trackRect:value:));
            method_exchangeImplementations(originalThumbRect, newThumbRect);
            [volumeSlider setFrame:CGRectMake(0, 0, 120, 27)];

        }
    }
    return volumeSlider;
}

問題は、オーディオ セッションを変更すると (プラグイン ヘッドフォンまたはプログラムで)、スライダーが画面から消えてしまうことです。このスライダーはテーブル ビュー内にあるため、上下にスクロールすると、スライダーが再び表示されます。画面に表示し続ける方法や、なぜ消えてしまうのか、誰か考えがありますか? ところで、私は AVAudioPlayer を使ってサウンドを再生しています。事前にt​​hx。

4

1 に答える 1

0

ARC を使用しているようで、インスタンスが解放され、システムがそれをスーパービューから削除する可能性があります。

これは確認していませんが、スライダーをクラスのプロパティに移動してから、割り当てて再度テストしてみます。

于 2013-04-23T15:08:17.937 に答える