【问题标题】:Need to resize UIImageView only from the top side?只需要从顶部调整 UIImageView 的大小吗?
【发布时间】:2016-03-15 01:20:10
【问题描述】:

我有一些 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)
            }
        }

    }

【问题讨论】:

  • 如果图像视图 (self) 最初是使用自动布局定位的,尝试更改其 frame 将不起作用...
  • @matt 你会建议我做什么 matt?
  • 我建议你告诉他你是否使用自动布局。
  • @YuchenZhong 嘿兄弟。问题是,是的,我确实有自动布局,并且我设法以编程方式根据 topConstraint 更改大小,而不是更改它的框架。但是我在如何根据我的触摸输入同步 topConstraint 的属性以在触摸开始时正确对应时遇到问题。到目前为止,Wingzero 给了我一些很好的建议,我走在正确的轨道上。但我坚持最后一个,仍在弄清楚。任何帮助表示赞赏。
  • 算你显示你当前使用的约束的屏幕截图吗?以及您按下按钮时当前按钮外观的屏幕截图(如果可能的话)?

标签: swift sprite-kit ios9


【解决方案1】:

如果你想从顶部改变,你应该改变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()

【讨论】:

  • 我在 Main.storyboard 中设置了这个对象,实际上我已经设置了一些约束。为了更改锚点,我需要做什么?我可以在类的 init 方法或 ViewController 中以某种方式初始化对象时这样做吗?有什么指导方针吗?
  • 我现在完全理解你了,兄弟。还有一件事,我如何根据我的触摸输入同步 topConstraint 以得到一个快乐的可调整大小的图像,最后有一个可移动的约束? :D
  • 您也可以添加图像视图的高度约束。所以你可以同时改变它们。
  • 我没有任何高度限制,我只有纵横比限制,指定了顶部、底部和水平中心。如果我设置了高度限制,我必须在第一次加载时根据屏幕的不同设备对其进行修改,因为它会在我认为的某些设备上显得更小或在其他设备上显得更大。 :( 我不能以某种方式使用顶部约束来与触摸输入变化成比例地挂钩吗?
  • 首先你应该弄清楚开始帧和结束帧。然后使用这个末端框架来计算你所拥有的相应约束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 2017-06-29
  • 2013-11-19
  • 1970-01-01
相关资源
最近更新 更多