我正在尝试在Swift中实现简单的图像处理,我想在UIImageView的图像上面绘制。
所以接口将如下图所示:
单击表情符号缺点时,我想拖动它并将其放在imageview上,或者只需点击它就会将其移动到uiimageview,
然后它可以在uiimageview内部移动并将整个图像保存到galery。
我在google上找不到有用的资源。
那么从哪里开始呢?
答案 0 :(得分:2)
如果表情符号是UIImageView
,您可以实施touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
。以下是mainImageView是要添加表情符号的视图。
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = event?.allTouches()?.first
let touchLocation = touch?.locationInView(self.view)
if(CGRectContainsPoint(emojiImageView?.frame, touchLocation)) {
//your emoji imageView has been selected.
addImageviewToMainImageView(emojiImageView)
}
}
func addImageviewToMainImageview(imageView: UIImageView!) {
imageView.removeFromSuperView()
let origin = CGPoint(mainImageView.center.x , mainImageView.center.y)
let frame = CGRect(origin.x, origin.y, imageView.frame.size.width, imageView.frame.size.height)
imageView.frame = frame
mainImageView.addSubview(imageView)
}
如果您想在emojiImageView
内移动mainImageView
,则应该以类似的方式将UIView
子类化为touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
和touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)
。
1)使用touchesBegan
检测触摸,确定是否触摸了mainImageView
个子视图中的一个。设置对此子视图的引用。
2)如果触摸了子视图,touchesMoved
将使用该引用来确定子视图的新位置:
let touch = event?.allTouches()?.first
let touchLocation = touch?.locationInView(self)
selectedSubview.center = touchLocation
答案 1 :(得分:1)
使用以下代码组合2个图像,我不是为拖放操作添加代码。
UIImage *mainImage = firstImage;
UIImage *smallImage = secondImage;
CGPoint renderingPoint = CGPointMake(50,50);
UIImage *outputImage = nil;
if (smallImage.size.width > mainImage.size.width || smallImage.size.height > mainImage.size.height)
{
return smallImage;
}
UIGraphicsBeginImageContext(firstImage.size);
[firstImage drawAtPoint:CGPointMake(0,0)];
[secondImage drawAtPoint:renderingPoint];
outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
这里的outputImage是2个组合图像的输出。 renderingPoint是您要开始绘制其他图像的Point。
只需添加触摸方法并获取Touch结束的点,将该点保持为中心点,并使用smallImage的宽度,即可计算其渲染点。
另外请记住,此处renderPoint是关于图像的原始大小,而不是imageview的大小,因此请相应地进行计算以向上或向下缩放到imageview。