ios - 将垂直 UISlider 放入现有容器 View 中?

标签 ios uiview cgaffinetransform layoutsubviews

我想创建一个垂直 UISlider并将其完全适合现有的容器 View ,该容器 View 的大小和位置来自 .xib文件使用 autoLayout .但我根本无法让它工作,我用谷歌搜索了我的手指。

我得到的最接近的结果创建了一个太长并超出屏幕的 slider 。

我是不是把代码放错地方了?

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

1.根据 Apple 的文档, View 的“框架”在转换后无效,不应设置。

2. slider 的框架在转换之前设置为 future 父级的尺寸(交换了 x 和 y)。

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

此代码无效。 slider 看起来是正确的,只是它超出了屏幕底部。 slider 边界甚至框架(Apple 称其无效)似乎与容器 View 的边界和框架相匹配。 slider 甚至不会停留在自己的范围内。

[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];

最佳答案

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

在 View 的“layoutSubviews”期间, subview 尚未布局,因此它们的边界尚未生效。我需要等到布局过程的后期才能获取父 View 的边界并将 slider 转换为适合。

最后,我将添加 slider 和转换 slider 的代码放在顶层 View Controller 的“viewDidAppear”中。这与原始问题中的代码相同 - 只是在不同的地方。

关于ios - 将垂直 UISlider 放入现有容器 View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833107/

相关文章:

ios - SCNLookAtConstraint 在幕后做什么?

iOS:在 UIView 中以百分比形式绘制圆圈

objective-c - 如何将适用于 UIView 的 View 转换应用到 NSView?

iphone - 从iPhone应用程序打开PDF

ios - 根据键值查询PFUser(Swift)

ios - 如何处理 IOS 中的用户身份验证持久性?

ios - 自动替换 UIView 中的 subview

objective-c - 如何在 Swift 中调用 [self new]

ios - 缩放 UIView 重置旋转

swift - 仅在边缘上描边 CGPath