要保持一个ImageView在屏幕边界范围内,您可以使用以下Swift代码:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
var imageWidth: CGFloat = 0
var imageHeight: CGFloat = 0
override func viewDidLoad() {
super.viewDidLoad()
// 获取图片的原始尺寸
imageWidth = imageView.frame.size.width
imageHeight = imageView.frame.size.height
// 添加拖动手势识别器
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
imageView.addGestureRecognizer(panGesture)
// 开启交互
imageView.isUserInteractionEnabled = true
}
@objc func handlePan(_ recognizer: UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self.view)
if let view = recognizer.view {
let centerX = view.center.x + translation.x
let centerY = view.center.y + translation.y
// 获取屏幕的尺寸
let screenWidth = view.superview!.frame.size.width
let screenHeight = view.superview!.frame.size.height
// 计算ImageView的边界范围
let minX = imageWidth / 2
let maxX = screenWidth - imageWidth / 2
let minY = imageHeight / 2
let maxY = screenHeight - imageHeight / 2
// 将ImageView的中心点限制在边界范围内
let constrainedX = max(minX, min(maxX, centerX))
let constrainedY = max(minY, min(maxY, centerY))
view.center = CGPoint(x: constrainedX, y: constrainedY)
}
recognizer.setTranslation(CGPoint.zero, in: self.view)
}
}
这段代码首先获取了ImageView的原始尺寸,并添加了一个拖动手势识别器。当用户拖动ImageView时,通过计算ImageView的中心点和屏幕的尺寸,将ImageView的中心点限制在屏幕边界范围内。最后,通过设置recognizer.setTranslation(CGPoint.zero, in: self.view)
将拖动的偏移量重置为零。