美文网首页
第一个Xcode项目(2) - Auto Layout - 布局

第一个Xcode项目(2) - Auto Layout - 布局

作者: P_T | 来源:发表于2016-01-16 12:34 被阅读130次

    [相关信息:Xcode7.2 ; Swift2.0]

    先回顾一下效果图


    看起来还不错的设计图

    第一行图标已经完成了,那第二行色块圆也是同理,跟第一行的Button放在一个View容器里,然后添加各种约束 (色块的宽高都为40),这里图就不一一贴了。直接上完成图


    第二行色块完成图
    设置第一行按钮的背景为图标 删除第二行Button的文字,然后运行下App (Command+R)
    运行效果图

    嗯,效果好像有什么地方不一样 -> 它怎么不是圆的!!属性面板上好像也没看到设置圆角的地方。难道要用代码才能设置!!?

    经过一番折腾和努力,发现可以在属性面板上直接设置,好,让我来娓娓道来


    设置Button的圆角值,边框的颜色和宽度

    设置好之后运行看下效果 (Command+R)


    运行后的效果 咦~~为什么颜色是黑色!?然后我改了红色,绿色,蓝色,然后它显示的都是黑色!!

    让我们看看问题在哪里?


    代码里看看怎么设置borderColor
    override func viewDidLoad() {
        super.viewDidLoad()// Do any additional setup after loading the view, typically from a nib.
        let button = UIButton.init()
        button.layer.borderColor = UIColor.redColor().CGColor
    }
    

    首先我们在代码里初始化了一个Button控件,然后在设置borderColor发现,它接受的颜色类型为CGColor。CGColor?什么鬼?

    百度一下,我就知道

    CGColor主要用于CoreGaphics框架之中,CGColor其实是个结构体,而我们通常在使用的CGColor的时候使用的是它的引用类型CGColorRef。CGColor主要由CGColorSapce和Color Components两个部分组成,同样的颜色组成,如果颜色空间不同的话,解析出来的结果可能会有所不同。这就像我们在处理图片数据的时候,如果把RGBA格式当成BGRA格式处理的结果可想而知。在Quartz 2D中CGColor常用来设置context的填充颜色,设置透明度等。

    不知道这个解释在说个卵。

    那再来看看我们给它的是什么Color?......经过调查显示 -> User Defined Runtime Attributes里面设置Color是UIColor
    这样一来,Button接收的颜色和我们给予的颜色类型不统一,那我们就无法改变它的颜色了。

    作为一个初学者能遇到的问题,其它大大肯定回答过这个问题,所以我找到了以下的解决方案:

    //User Defined Runtime Attributes, UIColor -> CGColor
    extension CALayer{
        public func setBorderColorFromUIColor(color: UIColor) {
            self.borderColor = color.CGColor
        }
    }
    
    扩展CAlayer,为它添加一个UIColor转CGColor的方法

    然后我们改一下User Defined Runtime Attributes里面的设置
    把layer.borderColor -> layer.borderColorFromUIColor


    修改User Defined Runtime Attributes

    最后我们来运行一下APP,看下效果 (Command+R)


    运行后的效果
    Perfect!!!收工~

    相关文章

      网友评论

          本文标题:第一个Xcode项目(2) - Auto Layout - 布局

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