美文网首页
Xib创建的view和代码view类关联后的技巧及注意事项总结

Xib创建的view和代码view类关联后的技巧及注意事项总结

作者: 桂宁813 | 来源:发表于2017-04-19 15:11 被阅读91次

    很久没有梳理过平日里在用xib做界面时的技巧,觉得有必要总结和梳理下:
    一、Xib文件的控件针对另一个控件设置多个约束另一个技巧:ctrl拉线至另一个控件,按住shift不放即可设置多个属性;
    二、Xib文件的button设置event至代码中,可以设置其argument为none,即没有传入sender,之前一直没有设置过;
    三、Xib创建的view和代码view类关联后,在代码中进行控件布局、需要注意的事项(看代码):

    //
    //  DSWelcomeView.swift
    //  DSWEIBO
    //
    //  Created by 左得胜 on 2017/4/19.
    //  Copyright © 2017年 zds. All rights reserved.
    //
    
    import UIKit
    import SDWebImage
    
    class DSWelcomeView: UIView {
        
        // MARK: - 公开控件/属性
        @IBOutlet weak var iconIV: UIImageView!
        @IBOutlet weak var tipLabel: UILabel!
        
        @IBOutlet weak var iconConsBottom: NSLayoutConstraint!
        
        // MARK: - View LifeCycle
        class func initView() -> DSWelcomeView {
            let v = Bundle.main.loadNibNamed("DSWelcomeView", owner: nil, options: nil)?.first as! DSWelcomeView
            
            // 如果使用自动布局设置的界面,xib默认的是600*600大小
            v.frame = UIScreen.main.bounds
            
            return v
        }
    
        /// 视图被添加到window上,表示视图已经显示了
        override func didMoveToWindow() {
            super.didMoveToWindow()
            
            // 视图是使用自动布局来设置的,只要是使用了自动布局
            // 当视图添加到窗口上时,根据父视图的大小,来计算约束值,更新控件位置
            // - layoutIfNeeded会直接按照当前的约束直接诶更新控件位置
            layoutIfNeeded()
            iconConsBottom.constant = bounds.size.height - 200
            
            // 如果控件们的frame还没哟计算好,所有的约束会一起动画!
            UIView.animate(withDuration: 1.0, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0, options: [], animations: {
            
                // 更新约束
                self.layoutIfNeeded()
            }) { (_) in
                UIView.animate(withDuration: 1.0, animations: {
                    self.tipLabel.alpha = 1
                }, completion: { (_) in
                    self.removeFromSuperview()
                })
            }
        }
        
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            // 提示:init?(coder aDecoder: NSCoder)只是刚刚从xib的二进制文件将视图数据加载完成,还没有和代码连线建立起关系,开发时千万不能在该方法中处理UI
        }
    
        override func awakeFromNib() {
            // xib加载的View中,awakeFromNib方法中不需要super;但是这个时候,view的bounds还没有设置
        
            if let urlStr = DSNetworkManager.shared.userAccount.avatar_large, let url = URL(string: urlStr) {
                 iconIV.sd_setImage(with: url, placeholderImage: UIImage(named: "avatar_default_big"))
            }
            // FIXME: - tips:右键选中响应的xib文件,sourcecontrol --> discard changes即可单独放弃对单个xib文件更改,恢复到之前的xib文件,其余不用动
    //        iconIV.layer.cornerRadius = 42.5 // iconIV.bounds.width
    //        iconIV.layer.masksToBounds = true
       
        }
    
        // MARK: - Private Method
    
        // MARK: - Action
    
        // MARK: - Public Method
    
        // MARK: - 私有控件/属性
    
    
    }

    相关文章

      网友评论

          本文标题:Xib创建的view和代码view类关联后的技巧及注意事项总结

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