【发布时间】:2016-04-18 23:10:43
【问题描述】:
我在 Swift 中使用 CGImageCreateWithImageInRect 在触摸位置创建部分图像的副本。
我的代码运行良好,除非用户触摸屏幕边缘并且矩形大小落在视图框架之外。它不是返回一个正方形,而是返回一个矩形(我假设),以切断位于视图之外的数量。更改的形状会偏离复制图像的位置,因此它不会与下部图像对齐。
如何保持方形/大小并忽略边界,以便我的图像对齐?
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first!.locationInView(mainImageView?.superview)
UIGraphicsBeginImageContext(self.view.bounds.size)
UIApplication.sharedApplication().keyWindow!.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let crop = CGRectMake(touch.x - CGFloat(brushWidth) / 2, touch.y - CGFloat(brushWidth) / 2, CGFloat(brushWidth), CGFloat(brushWidth))
let imageRef = CGImageCreateWithImageInRect(screenshot.CGImage, crop)
if imageRef != nil {
let newImage: UIImage = UIImage(CGImage: imageRef!, scale: mainImageView.image!.scale, orientation: mainImageView.image!.imageOrientation)
let bgImage = UIImageView(image: processedImage)
bgImage.center = touch
self.view.addSubview(bgImage)
}
}
}
}
这是一个工作示例:
这是一个扭曲图像的示例,因为我触摸了边缘:
【问题讨论】:
-
能否简单检查触摸是否发生在图像之外,如果发生则忽略它?
-
这是一个聪明的主意。我想了想,但从技术上讲,触摸是在图像内部。矩形的一部分刚刚落在外面,如果用户在边缘附近触摸,我仍然希望用户能够进行裁剪。
-
有道理。你知道为什么第二张图片中的黄色矩形包含移位的图像数据吗?如果您将矩形向左移动,您可以看到它和原始图像对齐。
-
不知道。我正在拔头发。我的猜测是,如果矩形悬挂在设备的框架上并且形状的变化会使其不对齐,那么矩形的大小会减小。
-
这是另一个猜测:如果你触摸熊猫照片的外部,那么对齐是相对于外部视图控制器而不是熊猫视图控制器完成的。由于外部视图控制器稍宽,因此矩形向外。如果你让你的熊猫视图控制器更窄会发生什么?
标签: ios swift uiimageview cgimage