在uiimageview上面绘制和移动图像 - 斯威夫特

时间:2015-12-22 21:26:53

标签: ios swift uiimageview uiimage

我正在尝试在Swift中实现简单的图像处理,我想在UIImageView的图像上面绘制。

所以接口将如下图所示:

Descreption

单击表情符号缺点时,我想拖动它并将其放在imageview上,或者只需点击它就会将其移动到uiimageview,

然后它可以在uiimageview内部移动并将整个图像保存到galery。

我在google上找不到有用的资源。

那么从哪里开始呢?

2 个答案:

答案 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。