I have basket court shape now I want to adjust it according to the user. User can adjust according to the direction of real environment court.
import UIKit
class basket_Court_Shape: NSObject {
@objc dynamic public class func drawCanvas1(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 240, height: 120), resizing: ResizingBehavior = .aspectFit) {
//// General Declarations
let context = UIGraphicsGetCurrentContext()!
//// Resize to Target Frame
context.saveGState()
let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 240, height: 120), target: targetFrame)
context.translateBy(x: resizedFrame.minX, y: resizedFrame.minY)
context.scaleBy(x: resizedFrame.width / 240, y: resizedFrame.height / 120)
//// Bezier 8 Drawing
let bezier8Path = UIBezierPath()
UIColor.gray.setFill()
bezier8Path.fill()
UIColor.black.setStroke()
bezier8Path.lineWidth = 1
bezier8Path.stroke()
//// Bezier 16 Drawing
let bezier16Path = UIBezierPath()
UIColor.black.setStroke()
bezier16Path.lineWidth = 1
bezier16Path.stroke()
//// Symbol Drawing
context.saveGState()
context.translateBy(x: 102.5, y: 116.5)
let symbolRect = CGRect(x: 0, y: -103, width: 63, height: 103)
context.saveGState()
context.clip(to: symbolRect)
context.translateBy(x: symbolRect.minX, y: symbolRect.minY)
basket_Court_Shape.drawCanvas2(frame: CGRect(origin: .zero, size: symbolRect.size), resizing: .stretch)
context.restoreGState()
context.restoreGState()
context.restoreGState()
}
@objc dynamic public class func drawCanvas2(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 63, height: 103), resizing: ResizingBehavior = .aspectFit) {
//// General Declarations
let context = UIGraphicsGetCurrentContext()!
//// Resize to Target Frame
context.saveGState()
let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 63, height: 103), target: targetFrame)
context.translateBy(x: resizedFrame.minX, y: resizedFrame.minY)
context.scaleBy(x: resizedFrame.width / 63, y: resizedFrame.height / 103)
//// Group
//// Bezier Drawing
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 0, y: 103))
bezierPath.addLine(to: CGPoint(x: 0, y: 103))
bezierPath.addLine(to: CGPoint(x: 0, y: 103))
bezierPath.addLine(to: CGPoint(x: 0, y: 103))
bezierPath.addLine(to: CGPoint(x: 0, y: 65.5))
bezierPath.addLine(to: CGPoint(x: 0, y: 34))
bezierPath.addLine(to: CGPoint(x: 0, y: 1))
UIColor.orange.setStroke()
bezierPath.lineWidth = 2
bezierPath.stroke()
//// Bezier 2 Drawing
let bezier2Path = UIBezierPath()
bezier2Path.move(to: CGPoint(x: 23, y: 1))
bezier2Path.addLine(to: CGPoint(x: 0, y: 1))
bezier2Path.addLine(to: CGPoint(x: 0, y: 1))
UIColor.orange.setStroke()
bezier2Path.lineWidth = 2
bezier2Path.stroke()
//// Bezier 3 Drawing
let bezier3Path = UIBezierPath()
bezier3Path.move(to: CGPoint(x: 24, y: 103))
bezier3Path.addLine(to: CGPoint(x: 0, y: 103))
UIColor.orange.setStroke()
bezier3Path.lineWidth = 2
bezier3Path.stroke()
//// Bezier 5 Drawing
let bezier5Path = UIBezierPath()
bezier5Path.move(to: CGPoint(x: 62.94, y: 50.5))
bezier5Path.addCurve(to: CGPoint(x: 24, y: 103), controlPoint1: CGPoint(x: 62.94, y: 50.5), controlPoint2: CGPoint(x: 66.28, y: 103))
UIColor.orange.setStroke()
bezier5Path.lineWidth = 2
bezier5Path.stroke()
//// Bezier 6 Drawing
let bezier6Path = UIBezierPath()
UIColor.black.setStroke()
bezier6Path.lineWidth = 2
bezier6Path.stroke()
//// Bezier 4 Drawing
let bezier4Path = UIBezierPath()
UIColor.black.setStroke()
bezier4Path.lineWidth = 2
bezier4Path.stroke()
//// Bezier 7 Drawing
let bezier7Path = UIBezierPath()
bezier7Path.move(to: CGPoint(x: 62.98, y: 52))
bezier7Path.addCurve(to: CGPoint(x: 23, y: 1), controlPoint1: CGPoint(x: 62.98, y: 52), controlPoint2: CGPoint(x: 65.33, y: 1))
UIColor.orange.setStroke()
bezier7Path.lineWidth = 2
bezier7Path.stroke()
//// Bezier 9 Drawing
let bezier9Path = UIBezierPath()
UIColor.black.setStroke()
bezier9Path.lineWidth = 2
bezier9Path.stroke()
//// Bezier 10 Drawing
let bezier10Path = UIBezierPath()
bezier10Path.move(to: CGPoint(x: 42, y: 23.5))
bezier10Path.addLine(to: CGPoint(x: 0, y: 23.5))
bezier10Path.addLine(to: CGPoint(x: 0, y: 82))
bezier10Path.addLine(to: CGPoint(x: 42, y: 82))
UIColor.orange.setStroke()
bezier10Path.lineWidth = 2
bezier10Path.stroke()
//// Bezier 11 Drawing
let bezier11Path = UIBezierPath()
bezier11Path.move(to: CGPoint(x: 42, y: 23.5))
bezier11Path.addLine(to: CGPoint(x: 42, y: 83.5))
UIColor.orange.setStroke()
bezier11Path.lineWidth = 2
bezier11Path.stroke()
//// Bezier 12 Drawing
let bezier12Path = UIBezierPath()
bezier12Path.move(to: CGPoint(x: 42, y: 35.5))
bezier12Path.addLine(to: CGPoint(x: 44, y: 35.5))
UIColor.orange.setStroke()
bezier12Path.lineWidth = 2
bezier12Path.stroke()
//// Bezier 14 Drawing
let bezier14Path = UIBezierPath()
bezier14Path.move(to: CGPoint(x: 42, y: 71.5))
bezier14Path.addLine(to: CGPoint(x: 44, y: 71.5))
UIColor.orange.setStroke()
bezier14Path.lineWidth = 2
bezier14Path.stroke()
//// Bezier 13 Drawing
let bezier13Path = UIBezierPath()
UIColor.orange.setStroke()
bezier13Path.lineWidth = 2
bezier13Path.stroke()
//// Bezier 20 Drawing
let bezier20Path = UIBezierPath()
bezier20Path.move(to: CGPoint(x: 57.98, y: 52))
bezier20Path.addCurve(to: CGPoint(x: 44, y: 71.5), controlPoint1: CGPoint(x: 57.98, y: 52), controlPoint2: CGPoint(x: 59.14, y: 71.5))
UIColor.orange.setStroke()
bezier20Path.lineWidth = 2
bezier20Path.stroke()
//// Bezier 21 Drawing
let bezier21Path = UIBezierPath()
UIColor.orange.setStroke()
bezier21Path.lineWidth = 2
bezier21Path.stroke()
//// Bezier 23 Drawing
let bezier23Path = UIBezierPath()
UIColor.orange.setStroke()
bezier23Path.lineWidth = 2
bezier23Path.stroke()
//// Bezier 15 Drawing
let bezier15Path = UIBezierPath()
UIColor.orange.setStroke()
bezier15Path.lineWidth = 2
bezier15Path.stroke()
//// Bezier 18 Drawing
let bezier18Path = UIBezierPath()
UIColor.orange.setStroke()
bezier18Path.lineWidth = 2
bezier18Path.stroke()
//// Bezier 22 Drawing
let bezier22Path = UIBezierPath()
bezier22Path.move(to: CGPoint(x: 58, y: 52))
bezier22Path.addCurve(to: CGPoint(x: 44, y: 35.5), controlPoint1: CGPoint(x: 58, y: 52), controlPoint2: CGPoint(x: 56.83, y: 35.5))
UIColor.orange.setStroke()
bezier22Path.lineWidth = 2
bezier22Path.stroke()
context.restoreGState()
}
public enum ResizingBehavior: Int {
case aspectFit /// The content is proportionally resized to fit into the target rectangle.
case aspectFill /// The content is proportionally resized to completely fill the target rectangle.
case stretch /// The content is stretched to match the entire target rectangle.
case center /// The content is centered in the target rectangle, but it is NOT resized.
public func apply(rect: CGRect, target: CGRect) -> CGRect {
if rect == target || target == CGRect.zero {
return rect
}
var scales = CGSize.zero
scales.width = abs(target.width / rect.width)
scales.height = abs(target.height / rect.height)
switch self {
case .aspectFit:
scales.width = min(scales.width, scales.height)
scales.height = scales.width
case .aspectFill:
scales.width = max(scales.width, scales.height)
scales.height = scales.width
case .stretch:
break
case .center:
scales.width = 1
scales.height = 1
}
var result = rect.standardized
result.size.width *= scales.width
result.size.height *= scales.height
result.origin.x = target.minX + (target.width - result.width) / 2
result.origin.y = target.minY + (target.height - result.height) / 2
return result
}
}
}