将垂直 UISlider 放入现有容器视图中?
Fit a Vertical UISlider into an Existing Container View?
我想创建一个垂直 UISlider
并将其完全适合现有的容器视图,该视图使用 autoLayout
从 .xib
文件调整大小和放置。但我根本无法让它工作,我用谷歌搜索了我的手指。
我得到的最接近的滑块创建的滑块太长并超出了屏幕。
我是不是把代码放错地方了?
我将代码放入 "layOutSubviews"
一些兴趣点:
1.PerApple的文档,视图的"frame"转换后无效,不应该设置。
2.The 滑块的框架在 转换之前 设置为未来父级的尺寸(交换了 x 和 y)。
3.The 变换后的视图似乎在变换前的坐标系中保持其边界。即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];
这段代码添加和旋转滑块没有问题。问题是代码必须放在滑块父视图的 "layoutSubviews" 方法中;相反,我在滑块的父视图的父视图的 "layoutSubviews" 中有它。当我的原始代码执行时,滑块的父视图尚未布局并且还没有正确的尺寸。
在视图的 "layoutSubviews" 期间,子视图尚未布局,因此它们的边界尚未生效。我需要等到布局过程的后期才能获取父视图的边界并将滑块转换为适合。
最后,我将添加滑块和转换滑块的代码放在顶层视图控制器的 "viewDidAppear" 中。这与原始问题中的代码相同 - 只是在不同的地方。
我想创建一个垂直 UISlider
并将其完全适合现有的容器视图,该视图使用 autoLayout
从 .xib
文件调整大小和放置。但我根本无法让它工作,我用谷歌搜索了我的手指。
我得到的最接近的滑块创建的滑块太长并超出了屏幕。
我是不是把代码放错地方了?
我将代码放入 "layOutSubviews"
一些兴趣点:
1.PerApple的文档,视图的"frame"转换后无效,不应该设置。
2.The 滑块的框架在 转换之前 设置为未来父级的尺寸(交换了 x 和 y)。
3.The 变换后的视图似乎在变换前的坐标系中保持其边界。即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];
这段代码添加和旋转滑块没有问题。问题是代码必须放在滑块父视图的 "layoutSubviews" 方法中;相反,我在滑块的父视图的父视图的 "layoutSubviews" 中有它。当我的原始代码执行时,滑块的父视图尚未布局并且还没有正确的尺寸。
在视图的 "layoutSubviews" 期间,子视图尚未布局,因此它们的边界尚未生效。我需要等到布局过程的后期才能获取父视图的边界并将滑块转换为适合。
最后,我将添加滑块和转换滑块的代码放在顶层视图控制器的 "viewDidAppear" 中。这与原始问题中的代码相同 - 只是在不同的地方。