需要仅从顶部调整UIImageView的大小?

时间:2016-03-15 01:20:11

标签: swift sprite-kit ios9

我有一些UIImageView类型的矩形,它是子类(Rectangle:UIImageView)类。我想要做的是,当touchesBegan或者touchesMoved时,我只需要调整它的顶部位置,而底部必须保持固定在它的位置,但我遇到了一些问题。问题是,它正在调整大小,但是从底部而不是顶部。我试过改变锚点但没有运气。似乎UIImageView锚点保持不变,它从底部调整大小。如何解决这个问题?

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)
    {

 if let touch = touches.first
    {
        let position = touch.locationInView(self.superview)
        if CGRectContainsPoint((self.superview?.frame)!, position)
        {

        self.frame = CGRect(x: self.frame.origin.x, y: 

self.frame.origin.y, width: self.frame.width, height: position.y)
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

如果你想从顶部改变,你应该改变origin.y,并据此根据你的需要计算出适当的高度。

    self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, 
                        width: self.frame.width, height: position.y)

上面的代码只会改变它的高度,并保持它的原点相同,这就是为什么你看到它从下到上移动的原因

正如亚马所说,如果你使用的是自动布局,那么你应该改变约束来移动视图,而不是改变框架。

更新: 由于您使用的是自动布局,因此您可以通过一种简单的方式控制 - 将顶部空间约束作为属性拖动到.m文件中,让我们将其称为topSpaceContraint,然后运行时间,改变它就像

topSpaceConstraint.constant = {WHAT EVER YOU WANT}

如果要为其设置动画,请在动画块中调用imageView.layoutIfNeeded()