美文网首页
iOS知识整理-UIView

iOS知识整理-UIView

作者: 皮皮蟹pipixie | 来源:发表于2019-09-26 14:56 被阅读0次

    总结下UIView一些比较重要的属性方法

    事件转递,坐标转换

    /** 当前UIView对象上产生触摸事件时触发,返回事件接收对象 */
    - (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;
    

    可重写这个方法,来完成一些指定的事件。比如说按钮被遮到下面了,但是我想让点击到这块区域的时候让按钮去相应点击

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
        // 当前坐标系上的点转换到按钮上的点
        CGPoint btnP = [self convertPoint:point toView:self.btn];
        // 判断点在不在按钮上
        if ([self.btn pointInside:btnP withEvent:event]) {
            // 点在按钮上
            return self.btn;
        }else{
            return [super hitTest:point withEvent:event];
        }
    }
    
    /** 判断当前的点击或者触摸事件的点是否在当前的view中,默认返回YES */
    - (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;
    


    坐标转换

    常用于视图在屏幕上占的坐置

    /** 将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值 */
    - (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;
    /** 与上方法相反*/
    - (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view;
    /** 将rect由rect所在视图转换到目标视图view中,返回在目标视图view中的rect */
    - (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view;
    /** 与上方法相反*/
    - (CGRect)convertRect:(CGRect)rect fromView:(nullable UIView *)view;
    /** 返回“最佳”大小适合给定的大小 */
    - (CGSize)sizeThatFits:(CGSize)size;
    /** 调整为刚好合适子视图大小 */
    - (void)sizeToFit;
    



    视图层次管理

    /** 获取视图所在的Window */
    @property(nullable, nonatomic,readonly) UIWindow     *window;
    /** 插入子视图(将子视图插到siblingSubview之下) */
    - (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
    /** 插入子视图(将子视图插到siblingSubview之上) */
    - (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;
    /** 将子视图拉到最上面来显示 */
    - (void)bringSubviewToFront:(UIView *)view;
    /** 将子视图拉到最下面来显示 */
    - (void)sendSubviewToBack:(UIView *)view;
    
    ##pragma mark - 系统自动调用(留给子类去实现)
    /** 添加自视图完成后调用 */
    - (void)didAddSubview:(UIView *)subview;
    /** 将要移除自视图时调用 */
    - (void)willRemoveSubview:(UIView *)subview;
    /** 对现在有布局有调整更改后,使用这个方法进行更新 */
    - (void)setNeedsLayout;
    /** 强制进行更新layout */
    - (void)layoutIfNeeded;
    /** 控件的frame发生改变的时候就会调用,一般在这里重写布局子控件的位置和尺寸 */
    - (void)layoutSubviews;
    

    setNeedsLayout代表需要更新布局,会在下一次runloop循环时更新布局。
    而layoutIfNeeded需要与布局更新搭配使用,会在当前runloop循环中更新布局。
    具体可参考该文章:setNeedsLayout和layoutIfNeeded看我就懂!


    渲染

    /** 重写drawRect方法,在可以这里进行绘图操作。*/
    - (void)drawRect:(CGRect)rect;
    /** 标记整个视图的边界矩形需要重绘, 调用这个方法会自动调用drawRect方法 */
    - (void)setNeedsDisplay;
    /** 标记在指定区域内的视图的边界需要重绘, 调用这个方法会自动调用drawRect方法 */
    - (void)setNeedsDisplayInRect:(CGRect)rect;
    
    /** 是否裁剪超出Bounds范围的子控件,默认NO */
    @property(nonatomic)                 BOOL              clipsToBounds;
    /** 内容显示的模式,默认UIViewContentModeScaleToFill */
    @property(nonatomic)                 UIViewContentMode contentMode;
    /** 拉伸属性,如图片拉伸 */
    @property(nonatomic)                 CGRect            contentStretch NS_DEPRECATED_IOS(3_0,6_0) __TVOS_PROHIBITED;
    /** 蒙板view */
    @property(nullable, nonatomic,strong)          UIView           *maskView NS_AVAILABLE_IOS(8_0);
     
    

    参考:iOS-UIView方法属性介绍

    相关文章

      网友评论

          本文标题:iOS知识整理-UIView

          本文链接:https://www.haomeiwen.com/subject/iurbuctx.html