用CALayer實現(xiàn)層疊效果堰乔,效果如下
第一層就不說了脐恩,主要層疊效果的實現(xiàn)
首先畫一個用來做第二層的calayer,這個layer比較簡單苟翻,直接上代碼
CALayer*cdLayer=[CALayer layer];
[cdLayer setFrame:CGRectMake(CengDieJJ, -CengDieJJ, self.frame.size.width, self.frame.size.height)];
cdLayer.borderColor=self.layer.borderColor;
cdLayer.borderWidth=1;
cdLayer.backgroundColor=self.backgroundColor.CGColor;
cdLayer.cornerRadius=8;
然后要對第二層進行剪裁骗污,我用的mask實現(xiàn)的,繪制需要保留的矩形诅炉,先放代碼
//設(shè)置剪裁矩形路徑(設(shè)置的圖形會被保留)
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0, 0);//初始點
CGPathAddLineToPoint(path, NULL, 0, CengDieJJ);//線條贴谎,需要設(shè)置的結(jié)束點的位置季稳,下面依次畫出需要保留的圖形
CGPathAddLineToPoint(path, NULL, self.frame.size.width-CengDieJJ, CengDieJJ);
CGPathAddLineToPoint(path, NULL, self.frame.size.width-CengDieJJ, self.frame.size.height);
CGPathAddLineToPoint(path, NULL, self.frame.size.width, self.frame.size.height);
CGPathAddLineToPoint(path, NULL, self.frame.size.width, 0);
CGPathCloseSubpath(path);// 關(guān)閉該path
//路徑繪制結(jié)束
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.bounds;//圖形總大小
maskLayer.path = path;
cdLayer.mask=maskLayer;//剪裁
這里遇到一個坑,原先以為我用CGMutablePathRef繪制的路徑是作剪裁的仲翎,后來怎么改都不對铛漓,發(fā)現(xiàn)原來路徑內(nèi)的會被保留,不會看說明文件好坑浓恶。
最后將layer添加到最底層,設(shè)置uiview超出部分可見
[self.layer insertSublayer:cdLayer atIndex:0];
self.clipsToBounds=NO;
以上就完成了
再說一下除了我用的insertSublayer atIndex湿镀,還有insertSublayer:below/above可以調(diào)整位置,具體可以看說明文件