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

我所获得的距离最近的一个滑块太长,并且超出了屏幕。

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

我将代码放入"layOutSubviews"一些兴趣点:

1.根据Apple的文档,转换后视图的“框架”无效,因此不应进行设置。

2.将滑块的框架设置为变换之前的 future 父级的尺寸(交换了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];

最佳答案

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

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

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

09-25 22:14
查看更多