Pie*_*e F 5 transparency drag-and-drop uikit ios
我正在为iOS应用程序构建拖放交互.我想让用户拖放包含透明部分的图像.
但是,拖动内容的默认预览是一个带有不透明白色背景的矩形,覆盖了我的应用程序的背景.
当我通过实现UIDragInteractionDelegate方法dragInteraction(_:previewForLifting:session :)来创建自定义预览时 ,就像Apple的代码示例采用自定义视图中的拖放一样,我的源图像的透明度仍然没有被考虑在内,这意味着我的预览图像仍显示在具有不透明白色背景的矩形中:
func dragInteraction(_ interaction: UIDragInteraction, previewForLifting item: UIDragItem, session: UIDragSession) -> UITargetedDragPreview? {
guard let image = item.localObject as? UIImage else { return nil }
// Scale the preview image view frame to the image's size.
let frame: CGRect
if image.size.width > image.size.height {
let multiplier = imageView.frame.width / image.size.width
frame = CGRect(x: 0, y: 0, width: imageView.frame.width, height: image.size.height * multiplier)
} else {
let multiplier = imageView.frame.height / image.size.height
frame = CGRect(x: 0, y: 0, width: image.size.width * multiplier, height: imageView.frame.height)
}
// Create a new view to display the image as a drag preview.
let previewImageView = UIImageView(image: image)
previewImageView.contentMode = .scaleAspectFit
previewImageView.frame = frame
/*
Provide a custom targeted drag preview that lifts from the center
of imageView. The center is calculated because it needs to be in
the coordinate system of imageView. Using imageView.center returns
a point that is in the coordinate system of imageView's superview,
which is not what is needed here.
*/
let center = CGPoint(x: imageView.bounds.midX, y: imageView.bounds.midY)
let target = UIDragPreviewTarget(container: imageView, center: center)
return UITargetedDragPreview(view: previewImageView, parameters: UIDragPreviewParameters(), target: target)
}
Run Code Online (Sandbox Code Playgroud)
我试图强制预览不是不透明的,但它没有帮助:
previewImageView.isOpaque = false
Run Code Online (Sandbox Code Playgroud)
如何在电梯预览中获得透明部件?
覆盖的backgroundColor在UIDragPreviewParameters,因为它定义为一拖项目预览的背景颜色.
将其设置为UIColor.clear,它是一个颜色对象,其灰度和alpha值均为0.0.
let previewParameters = UIDragPreviewParameters()
previewParameters.backgroundColor = UIColor.clear // transparent background
return UITargetedDragPreview(view: previewImageView,
parameters: previewParameters,
target: target)
Run Code Online (Sandbox Code Playgroud)
您可以UIBezierPath根据图像定义一个,并将其设置为previewParameters.visiblePath
示例(Swift 4.2):
let previewParameters = UIDragPreviewParameters()
previewParameters.visiblePath = UIBezierPath(roundedRect: CGRect(x: yourX, y: yourY, width: yourWidth, height: yourHeight), cornerRadius: yourRadius)
//... Use the created previewParameters
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1144 次 |
| 最近记录: |