使用 Swift 创建自定义饼图/甜甜圈样式图,并且在尝试从甜甜圈上切出洞时遇到了一个奇怪的问题。我已经尝试了第二个 UIBezierPath 的中心和半径的变化,但我无法从中心完成一个干净的切割孔。任何帮助将不胜感激。
UIView 的子类:
import UIKit
public class DoughnutView: UIView {
public var data: [Float]? {
didSet { setNeedsDisplay() }
}
public var colors: [UIColor]? {
didSet { setNeedsDisplay() }
}
@IBInspectable public var spacerWidth: CGFloat = 2 {
didSet { setNeedsDisplay() }
}
@IBInspectable public var thickness: CGFloat = 20 {
didSet { setNeedsDisplay() }
}
public override func draw(_ rect: CGRect) {
guard data != nil && colors != nil else {
return
}
guard …Run Code Online (Sandbox Code Playgroud) 一次只能发生一个 GeoCode 请求,而且它们是异步的,因此我需要在前一个请求完成后立即开始下一个请求。我让它像这样工作:
func one() {
let geocoder = CLGeocoder()
let one = myPlacesFakeData[0]
geocoder.geocodeAddressString(one.address, completionHandler: { (placemarks, error) in
if let error = error {
print("Unable to Reverse Geocode Location (\(error))")
} else {
if let placemarks = placemarks, let placemark = placemarks.first {
myPlacesFakeData[0].latitude = placemark.location?.coordinate.latitude
myPlacesFakeData[0].longitude = placemark.location?.coordinate.longitude
} else {
print("No Matching Address Found")
}
}
self.two()
})
}
func two() {
let geocoder = CLGeocoder()
let two = myPlacesFakeData[1]
geocoder.geocodeAddressString(two.address, completionHandler: { (placemarks, error) in …Run Code Online (Sandbox Code Playgroud)