ios - 匹配 UIToolBar 中的 MPVolumeView 和 UISlider 垂直位置

标签 ios objective-c uitoolbar mpvolumeview

我有一个 UIToolBar,旨在包含用于控制音量和亮度的 slider 。我对音量使用 MPVolumeView slider ,对亮度使用普通的 UISlider。虽然 slider 本身工作正常,但它们的垂直位置不匹配:

Mismatched UISlider and MPVolumeView

如何让它们处于同一高度?

我的代码:

- (void) createToolbar{

toolBar = [[UIToolbar alloc] init];
toolBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);

UISegmentedControl *modeSelector = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Play", @"Rec", nil]];
[modeSelector setSegmentedControlStyle:UISegmentedControlStyleBar];
[modeSelector addTarget:self action:@selector(changePlayMode) forControlEvents:UIControlEventValueChanged];
modeSelector.selectedSegmentIndex = 0;
UIBarButtonItem *modeSelectorAsToolbarItem = [[UIBarButtonItem alloc] initWithCustomView:modeSelector];

brightnessSlider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
brightnessSlider.minimumValue = 0;
brightnessSlider.maximumValue = 1;
brightnessSlider.value = [[UIScreen mainScreen] brightness];
brightnessSlider.continuous = YES;
[brightnessSlider addTarget:self action:@selector(adjustBrightness:) forControlEvents:UIControlEventValueChanged];
UIBarButtonItem *brightSliderAsToolbarItem = [[UIBarButtonItem alloc] initWithCustomView:brightnessSlider];

MPVolumeView *volView = [[MPVolumeView alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
volView.showsRouteButton = NO;
UIBarButtonItem *volSliderAsToolbarItem = [[UIBarButtonItem alloc] initWithCustomView:volView];

UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *toc = [[UIBarButtonItem alloc] initWithTitle:@"Contents" style:UIBarButtonItemStyleBordered target:self action:@selector(goToToC)];
[toolBar setItems:[NSArray arrayWithObjects:modeSelectorAsToolbarItem, flexibleSpace, brightSliderAsToolbarItem, volSliderAsToolbarItem, flexibleSpace, toc, nil] animated:NO];

toolBar.autoresizingMask |= UIViewAutoresizingFlexibleWidth;

[[self view] addSubview:toolBar];

}

(更改 CGRectMake 坐标似乎没有任何作用。)

问题“Custom MPVolumeView Thumb Image not vertically centered since iOS 5.1”中的评论似乎建议使用“固定拇指对齐”技巧解释here ,但据我所知,实现该代码似乎没有做任何事情,我不确定它是否在谈论同一个问题。

最佳答案

如果您创建 MPVolumeView 的普通子类并覆盖 volumeSliderRectForBounds:,您可以为 slider 矩形定义自己的对齐方式。我喜欢返回整个边界,它使 slider 在 MPVolumeView 的框架中居中

@interface KMVolumeView : MPVolumeView

@end

@implementation KMVolumeView

- (CGRect)volumeSliderRectForBounds:(CGRect)bounds
{
    return bounds;
}

@end

只需在代码或界面构建器中使用您的子类,然后您就可以可靠地定位体积 View 。

关于ios - 匹配 UIToolBar 中的 MPVolumeView 和 UISlider 垂直位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16787816/

相关文章:

ios - Xcode 无法使用 cocoapods 归档项目

iphone - 在 iPhone 或模拟器上检查设计

objective-c - 我如何访问 swift 文件中的 objective-c block

xcode - 为 UIPickerView 创建一个完成按钮

ios - UITableView:重命名编辑按钮 (UIBarButtonSystemItemEdit)

ios - 从 Parse 查询中获取数组

ios - 从 Rails 到 Swift 格式化时间 - iOS

ios - 是否可以在没有 UINavigationController 的情况下将 UIToolbar 放置在 UICollectionView 下方?

ios - 代表 : pass data without segue

ios - 滑动时更改 UIslider 缩略图