ここでの最初の質問なので、質問の形式に誤りがある場合は事前にお詫び申し上げます。
音量を制御するために 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 を使ってサウンドを再生しています。事前にthx。