iOS UIView Frame 剖析

起因:iOS13 后,UIModalPresentationFullScreen 模式,会导致原 View 的 frame 改变,非常诡异,所以就需要定位 frame 的变化,然而 View 的 frame 又和常规的方式不太一样,研究发现,才有以下的实现。

上代码

@implementation UIView (MGPrivate)


- (void)setFrame:(CGRect)frame
{
    if (self.tag == 10000)
    {
        
    }
    //设置frame时并没有考虑到仿射坐标变换属性transform。
    float w = frame.size.width;
    float h = frame.size.height;
    self.bounds = CGRectMake(0, 0, w, h);
    float x = frame.origin.x + self.bounds.size.width * self.layer.anchorPoint.x;
    float y = frame.origin.y  + self.bounds.size.height * 
    self.layer.anchorPoint.y;    
    self.center = CGPointMake(x, y);  
}


@end

关键是重写 View frame 的实现方法,其他就是通过 tag 定位到我们需要的 view。

注意: 真实的 frame 实现并不是如此,这里只是为了定位 frame 的变化。

你可能感兴趣的:(iOS UIView Frame 剖析)