将垂直UISlider安装到现有容器视图中?

时间:2016-03-06 21:58:49

标签: ios uiview cgaffinetransform layoutsubviews

我想创建一个垂直UISlider并将其完全适合现有容器视图,该视图使用.xibautoLayout文件调整大小并放置。但是我根本无法让它工作,而且我用手指搜索了我的手指。

我得到的最接近的地方会创建一个太长的滑块并延伸到屏幕外。

我将代码放在错误的位置吗?

我将我的代码放在"layOutSubviews"中 一些兴趣点:

1.Per Apple的文档,视图的“框架”在转换后无效,不应设置。

2.滑块的框架在转换之前设置为未来父级的尺寸(交换x和y)。

3.变换后的视图似乎在预变换坐标系中保持其边界。即,在90度变换之后,变换视图边界的宽度和高度似乎被交换。

此代码不起作用。滑块看起来正确,但它从屏幕底部延伸出来。滑块边界甚至框架(Apple认为无效)似乎与容器视图的边界和框架相匹配。滑块甚至不会保持在自己的范围内。

[super layoutSubviews];

CGRect trigLevelSliderFrame=self.trigLevelSliderContainer.bounds;
trigLevelSliderFrame.size.height=self.trigLevelSliderContainer.bounds.size.width;
trigLevelSliderFrame.size.width=self.trigLevelSliderContainer.bounds.size.height;

UISlider *mySlider=[[UISlider alloc] initWithFrame:trigLevelSliderFrame];
self.trigSlider=mySlider;
[mySlider release];

self.trigSlider.transform=CGAffineTransformMakeRotation(-M_PI_2);
CGPoint center=CGPointMake(self.trigLevelSliderContainer.bounds.size.width/2,self.trigLevelSliderContainer.bounds.size.height/2);
self.trigSlider.center=center;
[self.trigLevelSliderContainer addSubview:self.trigSlider];

1 个答案:

答案 0 :(得分:1)

此代码添加和旋转滑块没有问题。问题是必须将代码放入滑块父视图的“layoutSubviews”方法中;相反,我把它放在滑块父视图的父视图的“layoutSubviews”中。当我的原始代码执行时,滑块的父视图尚未布局,并且还没有正确的尺寸。

在视图的“layoutSubviews”期间,子视图尚未布局,因此它们的边界尚未生效。我需要等到布局过程的后期才能获得父视图的边界并转换滑块以适应。

最后,我将代码添加到滑块并在顶层视图控制器的“viewDidAppear”中转换滑块。这与原始问题中的代码相同 - 只是在不同的地方。