【发布时间】:2017-12-09 22:39:58
【问题描述】:
【问题讨论】:
标签: swift transform uisegmentedcontrol
【问题讨论】:
标签: swift transform uisegmentedcontrol
是的!
假设我们有一个包含 3 个段的分段控件:
实际上,它是一个包含 3 个subviews 的视图,输入为UISegment。如果我们尝试打印这个分段控件subviews(假设我们将它连接到所需的视图控制器为segmentedControlIBOutlet):
class ViewController: UIViewController {
// MARK:- IBOutlets
@IBOutlet weak var segmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
for view in segmentedControl.subviews {
print(view)
}
}
}
日志应该显示类似于:
UISegment: 0x7febebc06980;帧 = (229 0; 114 29);层=CALayer: 0x60000002edc0 UISegment:0x7febebe140c0;帧 = (114 0; 114 29);层=CALayer:0x618000231800 UISegment:0x7febebe14d30;帧 = (0 0; 113 29);层=CALayer:0x6180002319c0
因此,您可以将分段控件中的分段作为UISegment 访问,从而将所需的编辑作为 UIView 应用到它。例如,如果你想旋转第二段,你可以实现:
override func viewDidLoad() {
super.viewDidLoad()
for view in segmentedControl.subviews[1].subviews {
print(view)
view.transform = CGAffineTransform(scaleX: -1, y: 1)
}
}
如你所见,段也有子视图:
UISegmentLabel: 0x7f8b51701770;帧 = (0 0; 64 22.5);文字= '第二';不透明=否;用户交互启用 = 否;层= _UILabelLayer: 0x610000091530
UIImageView: 0x7f8b51701470;帧 = (114 0; 1 1);阿尔法 = 0;不透明 = 不;自动调整大小 = LM;用户交互启用 = 否;标签 = -1030;层= CALayer:0x610000031480
因此,您应该旋转所有这些子视图,如上面代码 sn-p 中所实现的那样。
输出将是:
同样的方法应该适用于具有图像而不是标题的分段控件:
旋转前:
旋转后:
【讨论】:
Segment 是一个小的 UIView,你可以对它应用一个转换。
获取子视图参考这个问题:
UISegmentedControl selected segment color
并参考另一个来“旋转”内容。
How to rotate UIView using transform
再一次,我只是更容易用它制作图像并使用它。
【讨论】: