How to set NSString's background cornerRadius on iOS7

后端 未结 6 693
长情又很酷
长情又很酷 2020-12-01 02:12

I want to set NSString\'s background cornerRadius on iOS7. But,NSString don\'t have layer...

Please tell me, how to set NSString\'s background cornerRadius on iOS7?<

6条回答
  •  独厮守ぢ
    2020-12-01 03:08

    Update to Swift 3.1 Emmanuel's code in swift updated to version 3.1

    class TagLayoutManager: NSLayoutManager {
    
    override func fillBackgroundRectArray(_ rectArray: UnsafePointer, count rectCount: Int, forCharacterRange charRange: NSRange, color: UIColor) {
    
        let cornerRadius:CGFloat = 5
        let path = CGMutablePath.init()
    
    
    
    
        if rectCount == 1 || (rectCount == 2 && (rectArray[1].maxX < rectArray[0].maxX)) {
    
            path.addRect(rectArray[0].insetBy(dx: cornerRadius, dy: cornerRadius))
    
            if rectCount == 2 {
                path.addRect(rectArray[1].insetBy(dx: cornerRadius, dy: cornerRadius))
            }
    
        } else {
    
            let lastRect = rectCount - 1
    
            path.move(to: CGPoint(x: rectArray[0].minX + cornerRadius, y: rectArray[0].maxY + cornerRadius))
    
            path.addLine(to: CGPoint(x: rectArray[0].minX + cornerRadius, y: rectArray[0].minY + cornerRadius))
            path.addLine(to: CGPoint(x: rectArray[0].maxX - cornerRadius, y: rectArray[0].minY + cornerRadius))
    
            path.addLine(to: CGPoint(x: rectArray[0].maxX - cornerRadius, y: rectArray[lastRect].minY - cornerRadius))
            path.addLine(to: CGPoint(x: rectArray[lastRect].maxX - cornerRadius, y: rectArray[lastRect].minY - cornerRadius))
    
            path.addLine(to: CGPoint(x: rectArray[lastRect].maxX - cornerRadius, y: rectArray[lastRect].maxY - cornerRadius))
            path.addLine(to: CGPoint(x: rectArray[lastRect].minX + cornerRadius, y: rectArray[lastRect].maxY - cornerRadius))
    
            path.addLine(to: CGPoint(x: rectArray[lastRect].minX + cornerRadius, y: rectArray[0].maxY + cornerRadius))
    
            path.closeSubpath()
    
        }
    
        color.set()
    
        let ctx = UIGraphicsGetCurrentContext()
        ctx!.setLineWidth(cornerRadius * 2.0)
        ctx!.setLineJoin(.round)
    
        ctx!.setAllowsAntialiasing(true)
        ctx!.setShouldAntialias(true)
    
        ctx!.addPath(path)
        ctx!.drawPath(using: .fillStroke)
    }
    }
    

提交回复
热议问题