ios layoutSubviews 使用注意

直接上代码:
override func layoutSubviews() {
     super.layoutSubviews()
        let originX = (self.width-self.paddleSize.width)/2.0
        let orignY = self.hight - 20-self.paddleSize.height;
        let origin =  CGPoint(x:originX,y:orignY)
        paddleView = UIView(frame:CGRect(origin: origin, size: paddleSize));
        paddleView!.backgroundColor = UIColor.orange;
        
        ballView.frame = CGRect(origin: CGPoint(x:self.center.x-BallSize.width/2 ,y:self.center.y - BallSize.width/2), size: CGSize(width: BallSize.width, height: BallSize.width));
       self.addSubview(ballView);
       self.addSubview(paddleView!)
        
    }

这是页面开始时,对paddleView设置了一个初始位置,然而我对其添加了panGuesture,手势移动,则ballView也跟着移动。

 func handPan(_ sender:UIPanGestureRecognizer)  {
        let state = sender.state;
        let touchPoint:CGPoint = sender.location(in: self);
        switch state {
        case .began:
            break;
        case .changed:
            var touchX:CGFloat = touchPoint.x;
            if touchX < paddleSize.width / 2 {
                touchX = paddleSize.width/2;
            }
            if touchX > self.width - paddleSize.width/2 {
                touchX = self.width - paddleSize.width/2
            }
            paddleView!.center = CGPoint(x: touchX, y: paddleView!.center.y);
            breakObjectBehavior.removeBundry(name:PathNames.paddleBundryName as NSCopying)
            addBundry();
//            print("volocity:\(sender.velocity(in: self))")
            breakBehaviorDataSource.pushAngle = checkingAngle(velocity: sender.velocity(in: self))
//            print("angle:\(breakBehaviorDataSource.pushAngle)")

            break;
        default:
            break;
        }
    }

由于在手势处理函数中对paddle设置了新的位置,UIKIT自动调用layoutSubviews方法,导致设置无效。

这里要么使用全局变量来设置subview的位置,要么更改初始化的位置:

    override init(frame: CGRect) {

        super.init(frame: frame)

}


然后viewController 初始化View时一定要调用init(frame)方法


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值