美文网首页
UIView的常见使用方法

UIView的常见使用方法

作者: 土豆吞噬者 | 来源:发表于2019-08-01 18:17 被阅读0次

    zPosition

    此属性默认值为0,该属性影响图层的前后顺序,当两个UIView重叠时,zPosition较高的一方显示在上面,但是不改变事件传递的顺序。

    frame,bounds,center的区别

    • frame:视图在其父视图中的位置和大小。
    • bounds:视图在其自身坐标系统中的位置和大小,位置默认为(0,0)。
    • center:视图的中心点在其父视图中的位置。

    内边距

    切换到Size inspector,设置Layout Margins为Fixed,然后设置上下左右的边距,最后在使用约束时选择Relative to margin即可。

    hitTest

    hitTest是UIView的一个方法,该方法会被系统调用,用于在视图中找到一个最适合的UIView来响应触摸事件。

    hitTest通过调用pointInside方法判断触摸点是否在视图内,当触摸点超过视图范围时,视图返回nil不处理触摸事件,所以当子视图超过父视图范围时虽然可见但是不能响应触摸事件,如果需要响应超出部分的触摸事件,需要重写父视图的hitTest方法。

        override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
            if (!isUserInteractionEnabled || isHidden || alpha <= 0.01 ){
                return nil
            }
            var view=super.hitTest(point, with: event)
            if view==nil{
                let p=button.convert(point, from: self)
                if let hitView=button.hitTest(p, with: event){
                    view=hitView
                }
            }
            return view
        }
    

    扩展UIView

    对于一些常用的控件属性,例如边框颜色,边框宽度,圆角半径要想在Storyboard中修改,只能通过用户自定义的运行时属性来实现,这种方式用起来比较麻烦,我们可以通过@IBInspectable为UIView添加自定义属性(@IBDesignable不支持extension)。



    还有一些常用的控件属性需要间接获取和修改,比较麻烦且不够直观,例如width,height等,我们可以为UIView添加这些扩展属性。

    extension UIView{
        
        @IBInspectable var borderWidth: CGFloat {
            set {
                layer.borderWidth = newValue/UIScreen.main.scale
                
            }
            get {
                return layer.borderWidth*UIScreen.main.scale
            }
        }
        
        @IBInspectable var cornerRadius: CGFloat {
            set {
                layer.cornerRadius = newValue
            }
            get {
                return layer.cornerRadius
            }
        }
        
        @IBInspectable var borderColor: UIColor? {
            set {
                guard let uiColor = newValue else { return }
                layer.borderColor = uiColor.cgColor
            }
            get {
                guard let color = layer.borderColor else { return nil }
                return UIColor(cgColor: color)
            }
        }
        
        public var left:CGFloat {
            get {
                return self.frame.origin.x
            }
            set(newLeft) {
                var frame = self.frame
                frame.origin.x = newLeft
                self.frame = frame
            }
        }
        
        public var top:CGFloat {
            get {
                return self.frame.origin.y
            }
            
            set(newTop) {
                var frame = self.frame
                frame.origin.y = newTop
                self.frame = frame
            }
        }
        
        public var width:CGFloat {
            get {
                return self.frame.size.width
            }
            
            set(newWidth) {
                var frame = self.frame
                frame.size.width = newWidth
                self.frame = frame
            }
        }
        
        public var height:CGFloat {
            get {
                return self.frame.size.height
            }
            
            set(newHeight) {
                var frame = self.frame
                frame.size.height = newHeight
                self.frame = frame
            }
        }
        
        public var right:CGFloat {
            get {
                return self.left + self.width
            }
        }
        
        public var bottom:CGFloat {
            get {
                return self.top + self.height
            }
        }
        
        public var centerX:CGFloat {
            get {
                return self.center.x
            }
            
            set(newCenterX) {
                var center = self.center
                center.x = newCenterX
                self.center = center
            }
        }
        
        public var centerY:CGFloat {
            get {
                return self.center.y
            }
            
            set(newCenterY) {
                var center = self.center
                center.y = newCenterY
                self.center = center
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:UIView的常见使用方法

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