在两个方向上调整视图大小?
Resizing a view in two directions?
在 Swift 我有一个问题。我知道如何使用手势调整视图的大小,但我想做的是让用户在两个不同的方向上缩放矩形视图。如果我想增加矩形的宽度,我会左右捏合。如果我想增加长度,请上下捏合。你明白了。到目前为止,这是我的代码。我不确定如何将我的伪代码转换为真实代码。
func axisFromPoints(p1: CGPoint, _ p2: CGPoint) -> String {
let x_1 = p1.x
let x_2 = p2.x
let y_1 = p1.y
let y_2 = p2.y
let absolutePoint = CGPoint(x: x_2 - x_1, y: y_2 - y_1)
let radians = atan2(Double(absolutePoint.x), Double(absolutePoint.y))
let absRad = fabs(radians)
if absRad > M_PI_4 && absRad < 3*M_PI_4 {
return "x"
} else {
return "y"
}
}
func handlePinch(_ sender : UIPinchGestureRecognizer) {
//var p1 = location(ofTouch 0,in:sender)
//var p2 = location of touch 1
//call function
// if function == 'x'
//view.transformed.scaledBy(x:sender.scale,y:1)
//if function == 'y'
//view.transformed.scaledBy(x:1,y:sender.scale)
if let view = sender.view {
view.transform = view.transform.scaledBy(x: sender.scale, y: sender.scale)
sender.scale = 1
}
}
这是我的做法。
func axisFromPoints(p1: CGPoint, _ p2: CGPoint) -> String {
let x_1 = p1.x
let x_2 = p2.x
let y_1 = p1.y
let y_2 = p2.y
let absolutePoint = CGPoint(x: x_2 - x_1, y: y_2 - y_1)
let radians = atan2(Double(absolutePoint.x), Double(absolutePoint.y))
let absRad = fabs(radians)
if absRad > M_PI_4 && absRad < 3*M_PI_4 {
return "x"
} else {
return "y"
}
}
func handlePinch(_ sender : UIPinchGestureRecognizer) {
if sender.state == .changed{
let p1: CGPoint = sender.location(ofTouch: 0, in: view)
let p2: CGPoint = sender.location(ofTouch: 1, in: view)
var x_scale = sender.scale;
var y_scale = sender.scale;
if axisFromPoints(p1,p2) == "x" {
y_scale = 1;
x_scale = sender.scale
}
if axisFromPoints(p1, p2) == "y" {
x_scale = 1;
y_scale = sender.scale
}
view.transform = view.transform.scaledBy(x: x_scale, y: y_scale)
sender.scale = 1
}}
在 Swift 我有一个问题。我知道如何使用手势调整视图的大小,但我想做的是让用户在两个不同的方向上缩放矩形视图。如果我想增加矩形的宽度,我会左右捏合。如果我想增加长度,请上下捏合。你明白了。到目前为止,这是我的代码。我不确定如何将我的伪代码转换为真实代码。
func axisFromPoints(p1: CGPoint, _ p2: CGPoint) -> String {
let x_1 = p1.x
let x_2 = p2.x
let y_1 = p1.y
let y_2 = p2.y
let absolutePoint = CGPoint(x: x_2 - x_1, y: y_2 - y_1)
let radians = atan2(Double(absolutePoint.x), Double(absolutePoint.y))
let absRad = fabs(radians)
if absRad > M_PI_4 && absRad < 3*M_PI_4 {
return "x"
} else {
return "y"
}
}
func handlePinch(_ sender : UIPinchGestureRecognizer) {
//var p1 = location(ofTouch 0,in:sender)
//var p2 = location of touch 1
//call function
// if function == 'x'
//view.transformed.scaledBy(x:sender.scale,y:1)
//if function == 'y'
//view.transformed.scaledBy(x:1,y:sender.scale)
if let view = sender.view {
view.transform = view.transform.scaledBy(x: sender.scale, y: sender.scale)
sender.scale = 1
}
}
这是我的做法。
func axisFromPoints(p1: CGPoint, _ p2: CGPoint) -> String {
let x_1 = p1.x
let x_2 = p2.x
let y_1 = p1.y
let y_2 = p2.y
let absolutePoint = CGPoint(x: x_2 - x_1, y: y_2 - y_1)
let radians = atan2(Double(absolutePoint.x), Double(absolutePoint.y))
let absRad = fabs(radians)
if absRad > M_PI_4 && absRad < 3*M_PI_4 {
return "x"
} else {
return "y"
}
}
func handlePinch(_ sender : UIPinchGestureRecognizer) {
if sender.state == .changed{
let p1: CGPoint = sender.location(ofTouch: 0, in: view)
let p2: CGPoint = sender.location(ofTouch: 1, in: view)
var x_scale = sender.scale;
var y_scale = sender.scale;
if axisFromPoints(p1,p2) == "x" {
y_scale = 1;
x_scale = sender.scale
}
if axisFromPoints(p1, p2) == "y" {
x_scale = 1;
y_scale = sender.scale
}
view.transform = view.transform.scaledBy(x: x_scale, y: y_scale)
sender.scale = 1
}}