我基本上試圖做的是在視圖中有一個文本標籤「剪切」文本形狀的洞。我試過使用self.mask = uiLabel
,但那些拒絕正確放置文本,所以我通過核心圖形接近這一點。核心圖形CGImage面具不影響
這裏是不工作的代碼(在draw(_ rect: CGRect)
):這是我要敷面膜
let context = (UIGraphicsGetCurrentContext())!
// Set mask background color
context.setFillColor(UIColor.black.cgColor)
context.fill(rect)
context.saveGState()
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
let attributes = [
NSParagraphStyleAttributeName: paragraphStyle,
NSFontAttributeName: UIFont.systemFont(ofSize: 16, weight: UIFontWeightMedium),
NSForegroundColorAttributeName: UIColor.white
]
let string = NSString(string: "LOGIN")
// This wouldn't vertically align so we calculate the string size and create a new rect in which it is vertically aligned
let size = string.size(attributes: attributes)
let position = CGRect(
x: rect.origin.x,
y: rect.origin.y + (rect.size.height - size.height)/2,
width: rect.size.width,
height: size.height
)
context.translateBy(x: 0, y: rect.size.height)
context.scaleBy(x: 1, y: -1)
string.draw(
in: position,
withAttributes: attributes
)
let mask = (context.makeImage())!
context.restoreGState()
// Redraw with created mask
context.clear(rect)
context.saveGState()
// !!!! Below line is the problem
context.clip(to: rect, mask: mask)
context.restoreGState()
基本上我已經成功地創建了代碼來創建一個CGImage
(在mask
變量)到整個圖像。
標記的行當替換與context.draw(mask, in: rect)
(查看掩碼)正確顯示。該面具顯示(正確)爲:
然而,一旦我嘗試將此面膜(使用context.clip(to: rect, mask: mask)
)沒有任何反應! 實際結果:
期望的結果是:
但由於某種原因掩模沒有被正確地應用。
此代碼似乎應該工作,因爲我一遍又一遍地閱讀文檔。我另外試圖在一個單獨的CGContext中創建了一個不起作用的掩碼。當我嘗試使用.copy(colorSpace:)
將CGImage(mask
)轉換爲CGColorSpaceCreateDeviceGray()
時,它返回nil
。我已經在這個爲期兩天,所以任何幫助表示讚賞
我也有類似的問題,一旦,但我的設置略有不同:'UIControl' c帶有UILabel子視圖的ustom子類。 –
在我的情況下,在渲染mas之前,在標籤子視圖上調用'setNeedsDisplay()'來修復它。 –