我有一個UIView
。在這個UIView
裏面,我有兩個相交的子視圖。我想在這兩個子UIViews
之間畫一個共同的概要。我如何解決這個問題?爲相交的UIViews(ObjectiveC)繪製一個共同的輪廓?
要清楚:
[mainView addSubview:subView1];
[mainView addSubview:subView2];
我要畫一個輪廓爲這兩個交叉UIView
秒。
我有一個UIView
。在這個UIView
裏面,我有兩個相交的子視圖。我想在這兩個子UIViews
之間畫一個共同的概要。我如何解決這個問題?爲相交的UIViews(ObjectiveC)繪製一個共同的輪廓?
要清楚:
[mainView addSubview:subView1];
[mainView addSubview:subView2];
我要畫一個輪廓爲這兩個交叉UIView
秒。
您可以組合兩個矩形的形狀並從最終形狀創建新的子圖層。此圖層將充當您的輪廓。
見我的代碼,它完全註釋:
// Create shape of merged rectangles
UIBezierPath *outlinePath = [UIBezierPath bezierPathWithRect:subView1.frame];
[outlinePath appendPath:[UIBezierPath bezierPathWithRect:subView2.frame]];
// Configure the outline
UIColor *outlineColor = [UIColor redColor];
CGFloat outlineWidth = 1.0f * [[UIScreen mainScreen] scale];
// Create shape layer representing the outline shape
CAShapeLayer *outlineLayer = [CAShapeLayer layer];
outlineLayer.frame = mainView.bounds;
outlineLayer.fillColor = outlineColor.CGColor;
outlineLayer.strokeColor = outlineColor.CGColor;
outlineLayer.lineWidth = outlineWidth;
// Set the path to the layer
outlineLayer.path = outlinePath.CGPath;
// Add sublayer at index 0 - below everything already in the view
// so it looks like the border
// "outlineLayer" is in fact the shape of the combined rectangles
// outset by layer border
// Moving it at the bottom of layer hierarchy imitates the border
[mainView.layer insertSublayer:outlineLayer atIndex:0];
輸出看起來是這樣的:
編輯:我誤解了這個問題在第一。下面是我的原始答案,其中概述了rects交集。
您可以創建另一個視圖,它將表示交叉點並將其添加到兩個子視圖的上方。它的框架是交叉的subView1
和subView2
frame
s。只需使用其layer
財產
您的代碼看起來是這樣給它明確的背景顏色和邊框:
// Calculate intersection of 2 views
CGRect intersectionRect = CGRectIntersection(subView1.frame, subView2.frame);
// Create intersection view
UIView *intersectionView = [[UIView alloc] initWithFrame:intersectionRect];
[mainView addSubview:intersectionView];
// Configure intersection view (no background color, only border)
intersectionView.backgroundColor = [UIColor clearColor];
intersectionView.layer.borderColor = [UIColor redColor].CGColor;
intersectionView.layer.borderWidth = 1.0f;
我很抱歉,但我真正想要的是共同的大綱。圖像中的這兩個視圖都是相交的,但紅線不是通用輪廓。 –
對不起,我起初誤解了你的問題。看到我編輯的答案,希望它有幫助 –
謝謝。它肯定有幫助。 –
有沒有簡單內置的選項archieve這一點。我可以想出多種方法來繪製一個共同的輪廓。例如,您可以在子視圖下方添加兩個視圖,其中包含擴展原始視圖的矩形,以便您可以看到輪廓。 [http://whathaveyoutried.com](http://whathaveyoutried.com) –