如何调用drawRect:当layoutSubviews在ios中调用时

时间:2016-04-26 10:30:02

标签: ios uiview drawrect layoutsubviews

我正在使用drawRect:来绘制形状。我必须调用此方法并在方向更改时重绘形状,所以我想如果有一种方法可以在调用drawRect:时自动调用layoutSubviews()

谢谢。

3 个答案:

答案 0 :(得分:5)

您可以将视图contentMode设置为.redraw

每当视图的边界发生变化时,这将调用setNeedsDisplay(因此drawRect),因此也会在轮换时调用(假设您已设置{{3这样视图的边界在旋转时会发生变化。)

答案 1 :(得分:2)

来自UIView类引用https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instm/UIView/drawRect

  

首次显示视图或事件时调用此方法   发生使视图的可见部分无效。你永远不应该   直接自己调用这个方法。要使部分视图无效,   从而导致该部分被重绘,调用setNeedsDisplay或   改为setNeedsDisplayInRect:方法。

就是这样。只需在相应的视图中调用setNeedsDisplay即可。

答案 2 :(得分:0)

在viewDidLoad()函数中输入:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil)

然后添加以下功能:

func rotated()
{
    if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation))
    {            
        print("landscape")
        // Your drawRect function here
    }

    if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation))
    {
        print("Portrait")
        // Your drawRect function here

    }

}