swift5.x view平移以及拖动四角改变frame
2020-05-28 本文已影响0人
Bruce_XHG
1、view添加pan手势,移动view在屏幕上的位置,根据需求是否要限制屏幕边界还是父视图边界
@objc func panSliding(pan:UIPanGestureRecognizer){
let point = pan.translation(in: self)
let width = self.superview!.frame.size.width
let height = self.superview!.frame.size.height
var originalFrame = self.frame
if originalFrame.origin.x >= 0 && (originalFrame.origin.x + originalFrame.size.width) <= width {
originalFrame.origin.x += point.x
}
if originalFrame.origin.y >= 0 && (originalFrame.origin.y+originalFrame.size.height) <= height {
originalFrame.origin.y += point.y
}
self.frame = originalFrame
pan.setTranslation(CGPoint.zero, in: self)
if pan.state == .began {
self.fastBtn.isEnabled = false
}else if pan.state == .changed {
}else{
var frame = self.frame;
//记录是否越界
var isOver = false
if frame.origin.x < 0 {
frame.origin.x = 0
isOver = true
}else if frame.origin.x + frame.size.width > width {
frame.origin.x = width - frame.size.width;
isOver = true
}
if frame.origin.y < 0 {
frame.origin.y=0
isOver = true
}else if frame.origin.y + frame.size.height > height {
frame.origin.y = height - frame.size.height
isOver = true
}
if(isOver) {
UIView.animate(withDuration: 0.2) {
self.frame = frame
}
}
self.fastBtn.isEnabled = true
}
}
2、有时候会遇到拖动view的四角改变view的frame,拖动的对角位置不变。我的做法是分别在四角添加了view以及对添加的view添加了pan手势,注意改变frame时的连续性(pan.setTranslation(CGPoint.zero, in: self))也就是这句代码
@objc func rightTopView(pan:UIPanGestureRecognizer){
let point = pan.translation(in: self)
let superviewMaxX = self.superview!.frame.size.width
// let superviewMaxY = self.superview!.frame.size.height
debugPrint(point)
var originalFrame = self.frame
if originalFrame.origin.y <= 0 {
originalFrame.origin.y = 0
}else{
if originalFrame.size.height <= 70 {
}else{
originalFrame.origin.y = originalFrame.origin.y + point.y
}
}
if originalFrame.size.height < 70 {
originalFrame.size.height = 70
}else{
if originalFrame.origin.y <= 0 {
}else{
originalFrame.size.height = originalFrame.size.height - point.y
}
}
if originalFrame.size.width < 180 {
originalFrame.size.width = 180
}else if originalFrame.size.width + originalFrame.origin.x > superviewMaxX {
originalFrame.size.width = superviewMaxX - originalFrame.origin.x
}else{
originalFrame.size.width = originalFrame.size.width + point.x
}
self.frame = originalFrame
pan.setTranslation(CGPoint.zero, in: self)
}