我希望能够将百分比值传递给CGRect
我创建了一个Percentage类来获取输入,然后创建了四个值(x,y,宽度,高度)
现在,我需要为CGRect创建一个扩展,以便能够使用其中的Percentage值。扩展程序返回错误。
extension CGRect {
init(x: Percentage, y: Percentage, width: Percentage, height: Percentage) {
self.init(x: Percentage.x, y: Percentage.y, width: Percentage.width, height: Percentage.height)
错误:实例成员“ x”不能用于类型“百分比”
}
}
class Percentage {
let x: CGFloat
let y: CGFloat
let width: CGFloat
let height: CGFloat
init(_ value: CGFloat) {
self.x = UIScreen.main.bounds.width * value
self.y = UIScreen.main.bounds.height * value
self.width = UIScreen.main.bounds.width * value
self.height = UIScreen.main.bounds.height * value
}
}
感谢您的帮助;)
编辑:
我想能够像这样使用它:
CGRect(x: Percentage(0.5), y: 50, width: 100, height: 100)
答案 0 :(得分:3)
实例成员'x'不能用于类型'百分比'
您正在使用类的类型,因此即使您使用了参数percentage
,也无法使用。
但是更好的情况是,您只是将某些Percentage
用作init
的参数,然后使用其属性(将它与小的p
一起使用,因为您需要使用init参数,而不是类类型)
init(percentage: Percentage) {
self.init(x: percentage.x, y: percentage.y, width: percentage.width, height: percentage.height)
}
编辑后,我不得不说您不必使用自定义init,您只需传递Percentage
的属性
CGRect(x: yourPercentage.x, y: 50, ...)
答案 1 :(得分:-1)
认为不需要自定义扩展名/类-只需使用:
let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
let viewRect = view.frame
let scaleFactor:CGFloat = 0.5
let scaledFrame = viewRect.applying(CGAffineTransform(scaleX: scaleFactor, y: scaleFactor))
print("Scaled size: \(scaledFrame)")
// Scaled size: (0.0, 0.0, 50.0, 50.0)
但是,您也可以将此“功能”移至扩展名。