旋转后UIImageView消失并移动到边缘

时间:2018-01-08 23:57:23

标签: ios swift uiimageview transform uigesturerecognizer

我编写了一个自定义类,它提供移动和旋转图像的功能。

我需要限制移动到父视图或Superview的边界。 所以,我写了下面的代码来限制它。

这在旋转图像之前工作正常。如果我尝试旋转图像然后将图像移动到边缘,图像将消失,不会留下任何记录或痕迹。

为什么它会消失,我该如何避免呢?

if(frame.origin.x < 1)
{
    frame.origin.x = 1
}
if(frame.origin.y < 1)
{
    frame.origin.y = 1
}
if(frame.maxX > superview!.frame.width)
{
    frame.origin.x = superview!.frame.width - frame.width - 1
}
if(frame.maxY > superview!.frame.height)
{
    frame.origin.y = superview!.frame.height - frame.height - 1
}

如果删除上面的代码,则没有任何内容消失,但图像会移出边界。所以我觉得上面只有一些错误。

请帮助我在轮换后正确实现此功能。

Full Movable Image类代码:

class movableImageView: UIImageView
{
    var CenCooVar = CGPoint()

    override init(image: UIImage!)
    {
        super.init(image: image)

        self.userInteractionEnabled = true

        let moveImage = UIPanGestureRecognizer(target: self, action: #selector(moveImageFnc(_:)))
        let rotateImage = UIRotationGestureRecognizer(target: self, action: #selector(rotateImageFnc(_:)))

        self.gestureRecognizers = [moveImage,rotateImage]
    }

    func moveImageFnc(moveImage: UIPanGestureRecognizer)
    {
        if moveImage.state == UIGestureRecognizerState.Began
        {
            CenCooVar = self.center
        }

        if moveImage.state == UIGestureRecognizerState.Changed
        {
            let moveCooVar = moveImage.translationInView(self.superview!)

            self.center = CGPoint(x: CenCooVar.x + moveCooVar.x, y: CenCooVar.y + moveCooVar.y)

            if(frame.origin.x < 1)
            {
                frame.origin.x = 1
            }
            if(frame.origin.y < 1)
            {
                frame.origin.y = 1
            }
            if(frame.maxX > superview!.frame.width)
            {
                frame.origin.x = superview!.frame.width - frame.width - 1
            }
            if(frame.maxY > superview!.frame.height)
            {
                frame.origin.y = superview!.frame.height - frame.height - 1
            }
        }

        if moveImage.state == UIGestureRecognizerState.Ended
        {
            CenCooVar = self.center
        }
    }

    func rotateImageFnc(rotateImage: UIRotationGestureRecognizer)
    {
        if rotateImage.state == UIGestureRecognizerState.Changed
        {
            self.transform = CGAffineTransformRotate(self.transform, rotateImage.rotation)
            rotateImage.rotation = 0
        }
    }
}

0 个答案:

没有答案