iOS的坐标系是如何工作的?

iOS的坐标系是如何工作的?,ios,uiview,frame,bounds,Ios,Uiview,Frame,Bounds,很高兴认识你。我正在研究iOS的UIView坐标系。 框架很容易理解,但边界却不容易理解 例如,当您更改原点时,框架按预期工作。 即使我们改变原点,边界也不会改变它的位置 为什么我们需要边界?我想。 我在网上努力搜索。所以,我发现了一些事实 --首先-- 边界的字面意思是边界。iOS只能在该边界线内绘制图片。如上图所示,UIButton也有边界,当它超过边界时,图片被剪切并绘制 --第二-- 边界大小和框架大小相同。 这不重要,但我试着测试一下 --三分之一-- bounds.origin

很高兴认识你。我正在研究iOS的UIView坐标系。 框架很容易理解,但边界却不容易理解

例如,当您更改原点时,框架按预期工作。

即使我们改变原点,边界也不会改变它的位置

为什么我们需要边界?我想。 我在网上努力搜索。所以,我发现了一些事实

--首先--

边界的字面意思是边界。iOS只能在该边界线内绘制图片。如上图所示,UIButton也有边界,当它超过边界时,图片被剪切并绘制

--第二-- 边界大小和框架大小相同。

这不重要,但我试着测试一下

--三分之一-- bounds.origin在视图层次结构中也很有用。但它的工作原理与框架不同

框架很容易理解。 ViewController的根视图从上到下为700

如果您查看iOS中的坐标系,您可以看到框架应该是这样工作的。

但是,边界不会自行移动,只会移动其下方的子视图。我不明白这部分。

所以,我在谷歌上搜索了它。 最终,我找到了一个数学公式,当SuperView.origin.bounds发生更改时,子视图可以重新定位。 출처 :

顺便问一下,苹果为什么使用这些公式?基本上,根据我们认为的坐标系

CompositedPosition.x = View.frame.origin.x + Superview.bounds.origin.x;
CompositedPosition.y = View.frame.origin.y + Superview.bounds.origin.y;
这个公式不是更直观吗

所以,我的问题是这些

当我在原始状态下将SuperView.bounds.origin.y增加700时,为什么子视图向上移动而不是向下移动??? 我应该接受这个公式并记住它吗? --------------------------------

--------------编辑-1--------------

现在我通过研究UIScrollView得到了边界的概念

CompositedPosition.x = View.frame.origin.x - Superview.bounds.origin.x;
CompositedPosition.y = View.frame.origin.y - Superview.bounds.origin.y;
这是对的

这是我所理解的一幅图画。

是的,我同意这张照片看起来很眩晕对不起

如果我向上滚动scrollview,bounds.origin.y将增加并偏移.y将增加,并且scrollview的frame.origin.y中附加的子视图不会更改,但是iOS会使用该公式计算子视图到drawCompositedPosition的位置,所以!看起来子视图将上升


简而言之,边界更改->iOS使用该公式计算->绘制

首先,请用英语或其他支持的语言发布

第二,我想我可能已经理解了你的意图,这是一个简单的答案

首先,每个视图都有一个坐标系,但每个视图也有自己的坐标系。视图的每个子视图都在SuperView坐标系内定义


我想多说几句,但我只是想看看这些照片。而且即使是在英文的帖子中,我也很难相信这篇帖子是所提出问题的一个最低限度的例子。使用英语。2.转到1:这是一个英语网站,你的帖子需要用英语写。图像也太多了。代码必须是文本,格式正确,便于阅读。如果您觉得需要对其进行注释,请在代码中使用注释。这篇文章对代理背后的人或在移动设备上阅读的人没有任何用处,带宽有限且有时很昂贵的人会对你说一些非常粗鲁的话。对不起!,现在我翻译。看看这个链接:谢谢你的链接!谢谢你的帖子!
import UIKit

class ViewController: UIViewController {

    var childView : UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let rect = CGRect(x: 100, y: 100, width: 200, height: 200)
        childView = UIView(frame: rect)
        childView.backgroundColor = UIColor.red
        self.view.addSubview(childView)
        self.view.backgroundColor = UIColor.cyan
    }

    override func viewDidAppear(_ animated: Bool) {
        UIView.animate(withDuration: 10, animations: {

        self.view.bounds = CGRect(x: 0, y: 700, width: self.view.frame.size.width, height: self.view.frame.size.height)

        })
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
CompositedPosition.x = View.frame.origin.x - Superview.bounds.origin.x;
CompositedPosition.y = View.frame.origin.y - Superview.bounds.origin.y;
CompositedPosition.x = View.frame.origin.x + Superview.bounds.origin.x;
CompositedPosition.y = View.frame.origin.y + Superview.bounds.origin.y;
CompositedPosition.x = View.frame.origin.x - Superview.bounds.origin.x;
CompositedPosition.y = View.frame.origin.y - Superview.bounds.origin.y;