I want the bottom (not quite half) of my UIView to be a different color than the top.
I\'m wondering if I should create a CGRect and then color that? Is this along the r
With Swift 5.1 and iOS 13, you may choose one of the two following ways in order to solve your problem.
CGRect instance with a UIColor instance inside a UIView subclass using UIRectFill(_:) functionUIKit provides a UIRectFill(_:) function. UIRectFill(_:) has the following declaration:
func UIRectFill(_ rect: CGRect)
Fills the specified rectangle with the current color.
The following Playground code shows how to use UIRectFill(_:):
import UIKit
import PlaygroundSupport
class CustomView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.green
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ rect: CGRect) {
super.draw(rect)
let bottomRect = CGRect(
origin: CGPoint(x: rect.origin.x, y: rect.height / 2),
size: CGSize(width: rect.size.width, height: rect.size.height / 2)
)
UIColor.red.set()
UIRectFill(bottomRect)
}
}
let view = CustomView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
PlaygroundPage.current.liveView = view
CGRect instance with a UIColor instance inside a UIView subclass using CGContext's fill(_:) methodCGContext has a method called fill(_:). fill(_:) has the following declaration:
func fill(_ rect: CGRect)
Paints the area contained within the provided rectangle, using the fill color in the current graphics state.
The following Playground code shows how to use fill(_:):
import UIKit
import PlaygroundSupport
class CustomView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.green
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ rect: CGRect) {
super.draw(rect)
let bottomRect = CGRect(
origin: CGPoint(x: rect.origin.x, y: rect.height / 2),
size: CGSize(width: rect.size.width, height: rect.size.height / 2)
)
UIColor.red.set()
guard let context = UIGraphicsGetCurrentContext() else { return }
context.fill(bottomRect)
}
}
let view = CustomView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
PlaygroundPage.current.liveView = view