切指定圓角以及xib自定義view出現(xiàn)的問題

  1. 如果切4個圓角可以直接用view.layer.cornerRaidus這個屬性,需要設(shè)置layer.maskToBounds = YES;
    一把沒問題,如果考慮離屏渲染啥的,圖片又大又多的話可能造成卡頓。

  2. 可以用UIBezierPath和CAShapeLayer的組合定義mask來達(dá)到切圓角的目的,并且而可以指定其中的任意圓角。如下,指定了切左上和右上2個角。
    如下,

UIBezierPath *cardImgPath = [UIBezierPath bezierPathWithRoundedRect: self.cardImgView.bounds byRoundingCorners:UIRectCornerTopRight | UIRectCornerTopLeft cornerRadii:CGSizeMake(5, 5)];
CAShapeLayer *cardLayer = [[CAShapeLayer alloc] init];
cardLayer.path = cardImgPath.CGPath;
self.cardImgView.layer.mask = cardLayer;
  1. 今天用xib自定義了一個view,像往常一樣,用上面的代碼去切圓角,發(fā)現(xiàn)無論設(shè)置指定的圓角,它只顯示左上角被切了,其余的角沒變化。
    通過打印xib中子控件的坐標(biāo),發(fā)現(xiàn)size都不正常,沒和屏幕適配。而且就算把size設(shè)置小一些還是不起作用。
    經(jīng)過思考xib和控制器的關(guān)系,在xib顯示到控制器顯示的時候,其實已經(jīng)存在了,xib的子控件大小還沒和屏幕適配。當(dāng)設(shè)置了xib的frame,通過autoLayout子控件才顯示正常。這才看起來正常了。
    所以,在xib加載的時候它需要自動調(diào)整才能適配屏幕,autoLayout的時候去切圓角,frame不是確定的,它就沒法去切其他的角了。
    所以,指定確定frame就可以了。

經(jīng)過上面的一波分析,解決辦法就是直接指定rect,不使用view.bounds,如下:

UIBezierPath *cardImgPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, size.width, size.height) byRoundingCorners:UIRectCornerTopRight | UIRectCornerTopLeft cornerRadii:CGSizeMake(5, 5)];

PS:這個size是在設(shè)置xib的frame后計算的。根據(jù)自己的實際需求計算size。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,701評論 4 61
  • 最近遇到一個需求,label樣式設(shè)置如下,并不是四個圓角,而是右上和右下設(shè)置圓角。 代碼很簡單,寫一個方法,需要裁...
    隕之希留leo閱讀 8,469評論 1 15
  • 可憐以浮華為食品, 小蠓蟲在燈下紛墜, 不甘淡如水,還要醉, 而拋下露養(yǎng)的青身。 多少艘艨艟一齊發(fā), 白帆篷拜倒於...
    簡書茶館葉老板閱讀 1,853評論 0 8
  • 2017年6月6日 星期二 小雨 今天終于下了一點小雨感覺有點冷。下班回家兒子在家寫作業(yè)。今天還比較自覺。我回到...
    巭Pro閱讀 191評論 0 1
  • 友情比愛情長久 所以我選擇了愛情 陪伴比離去幸福 所以我選擇了離去 死亡比生命永恒 所以我選擇了生命
    Toto_閱讀 160評論 0 0

友情鏈接更多精彩內(nèi)容