答案 0 :(得分:4)
是的!
考虑到我们有一个分段控件包含3个段:
实际上,它是一个包含3 subviews
的视图,输入为UISegment
。如果我们尝试打印此分段控件subviews(假设我们将其作为segmentedControl
IBOutlet连接到所需的视图控制器):
class ViewController: UIViewController {
// MARK:- IBOutlets
@IBOutlet weak var segmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
for view in segmentedControl.subviews {
print(view)
}
}
}
日志应显示类似于:
的内容UISegment:0x7febebc06980; frame =(229 0; 114 29); layer = CALayer: 0x60000002edc0 UISegment:0x7febebe140c0; frame =(114 0; 114 29); layer = CALayer:0x618000231800 UISegment:0x7febebe14d30; frame =(0 0; 113 29); layer = 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; frame =(0 0; 64 22.5); text = '其次&#39 ;; opaque = NO; userInteractionEnabled = NO; layer = _UILabelLayer:0x610000091530
UIImageView:0x7f8b51701470; frame =(114 0; 1 1); alpha = 0;不透明= 没有; autoresize = LM; userInteractionEnabled = NO; tag = -1030; layer = CALayer:0x610000031480
因此,您应该轮换所有这些子视图,如代码段上方所示。
输出结果为:
同样的方法应该适用于具有图像而不是标题的分段控件:
旋转之前:
旋转后:
答案 1 :(得分:1)
一个段是一个小的UIView,你可以只对它应用一个转换。
请参阅有关获取子视图的问题:
UISegmentedControl selected segment color
并参考另一个"旋转"内容。
How to rotate UIView using transform
然后,再一次,我可以更容易地制作出一张图片并使用它。