转换分段控制中的特定细分

时间:2017-07-06 05:02:27

标签: swift transform uisegmentedcontrol

有没有办法转换分段控件中包含的特定细分的内容? (我必须旋转180度)

不是包含在其中的图像,因为在我的情况下没有一个(我使用过FontAwesome)

演示:

original到:rotated

2 个答案:

答案 0 :(得分:4)

是的!

考虑到我们有一个分段控件包含3个段:

enter image description here

实际上,它是一个包含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

因此,您应该轮换所有这些子视图,如代码段上方所示。

输出结果为:

enter image description here


同样的方法应该适用于具有图像而不是标题的分段控件:

旋转之前:

enter image description here

旋转后:

enter image description here

答案 1 :(得分:1)

一个段是一个小的UIView,你可以只对它应用一个转换。

请参阅有关获取子视图的问题:

UISegmentedControl selected segment color

并参考另一个"旋转"内容。

How to rotate UIView using transform

然后,再一次,我可以更容易地制作出一张图片并使用它。