这是什么?好的...有点“棘手”
import SwiftUI
struct Arc : Shape
{
@Binding var startAngle: Double
@Binding var endAngle: Double
var center: CGPoint
var radius: CGFloat
var color: Color
func path(in rect: CGRect) -> Path
{
var path = Path()
let cgPath = CGMutablePath()
cgPath.addArc(center: CGPoint(x: rect.midX,y: rect.midY),radius: radius,startAngle: CGFloat(startAngle),endAngle: CGFloat(endAngle),clockwise: true)
// path.addArc(center: center,startAngle: .degrees(270),endAngle: .degrees(endAngle),clockwise: false)
path = Path(cgPath)
return path.strokedPath(.init(lineWidth: 50,lineCap: .round))
}
}
struct ContentView: View {
var body: some View {
ZStack() {
// Arc(endAngle: .constant(269),center: CGPoint(x: 200,y: 200),radius: 150,color: .red).foregroundColor(.red).opacity(0.2)
Arc(startAngle: .constant(80 + 271),endAngle: .constant(80 + 271 + 340),center: CGPoint(x: 205,y: 205),color: .red).foregroundColor(.red)//.shadow(color: .black,radius: 5,x: -30,y: -170)
Arc(startAngle: .constant(90),endAngle: .constant(80 + 270),color: .red).foregroundColor(.red).shadow(color: .black,x: -114,y: -230)
}.background(Color.black)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
,
你的意思是这样吗?
struct Arc : Shape
{
@Binding var endAngle: Double
var center: CGPoint
var radius: CGFloat
var color: Color
func path(in rect: CGRect) -> Path
{
var path = Path()
path.addArc(center: center,clockwise: false)
return path.strokedPath(.init(lineWidth: 50,lineCap: .round))
}
}
struct ContentView: View {
var body: some View {
ZStack() {
Arc(endAngle: .constant(269),color: .red).foregroundColor(.red).opacity(0.2)
Arc(endAngle: .constant(90),color: .red).foregroundColor(.red)
}
}
}
,
嗨,您可以通过在项目文件中编写扩展名来修复和处理所有这些功能
import UIKit
extension UIView {
func roundCorners(corners: UIRectCorner,radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds,byRoundingCorners: corners,cornerRadii: CGSize(width: radius,height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
}
// MARK: Shadow extension UIView {
func dropShadow(scale: Bool = true) {
layer.masksToBounds = false
layer.shadowColor = UIColor.blue.cgColor
layer.shadowOpacity = 1.0
layer.shadowOffset = CGSize(width: -1.5,height: 3)
layer.shadowRadius = 3
layer.shadowPath = UIBezierPath(rect: bounds).cgPath
layer.shouldRasterize = true
layer.rasterizationScale = scale ? UIScreen.main.scale : 1
}
func dropShadow(color: UIColor,opacity: Float = 0.5,offSet: CGSize,radius: CGFloat = 1,scale: Bool = true) {
layer.masksToBounds = false
layer.shadowColor = color.cgColor
layer.shadowOpacity = opacity
layer.shadowOffset = offSet
layer.shadowRadius = radius
layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath
layer.shouldRasterize = true
layer.rasterizationScale = scale ? UIScreen.main.scale : 1
}
func setAnchorPoint(_ point: CGPoint) {
var newPoint = CGPoint(x: bounds.size.width * point.x,y: bounds.size.height * point.y)
var oldPoint = CGPoint(x: bounds.size.width * layer.anchorPoint.x,y: bounds.size.height * layer.anchorPoint.y)
newPoint = newPoint.applying(transform)
oldPoint = oldPoint.applying(transform)
var position = layer.position
position.x -= oldPoint.x
position.x += newPoint.x
position.y -= oldPoint.y
position.y += newPoint.y
layer.position = position
layer.anchorPoint = point
}
class func fromNib<T: UIView>() -> T {
guard let view = Bundle.main.loadNibNamed(String(describing: T.self),owner: nil,options: nil)?.first as? T else { fatalError() }
return view
}
现在在情节提要中您可以处理阴影
或者您不想这样做,而且太多了,您可以只使用所需的部分。
本文链接:https://www.f2er.com/3133429.html