垂直附加CGRect

时间:2017-10-12 09:13:34

标签: objective-c cocoa

两个单独的CGRect,具有相同的大小和相同的起点,但内容不同。

CGRect rect1 = CGRectMake(0, 0, 800, 600);
CGRect rect2 = CGRectMake(0, 0, 800, 600);

我想将rect2添加到rect1的底部:

+-----------------------------+
|                             |
|                             |
|           Rect1             |
|                             |
|                             |
|-----------------------------|
|                             |
|                             |
|           Rect2             |
|                             |
+-----------------------------+

有人可以告诉我如何实现这一目标吗?谢谢。

更新

- (CGRect)combineCGRect:(CGRect)rect1 f2:(CGRect)rect2 {
    rect2 = CGRectOffset(rect2, 0, rect1.size.height);
    return CGRectUnion(rect1, rect2);
}

NSRect IR1 =[someNSView frame];
CGRect tmp2 = [self combineCGRect:NSRectToCGRect(IR1) f2:NSRectToCGRect(IR1)];

2 个答案:

答案 0 :(得分:1)

CGRectUnion(rect1, rect2)将为您提供完全包含两个矩形的最小矩形。如果它们的宽度相同而另一个直接位于另一个之下,那么它将为您提供所需的答案。

如果它们都具有相同的原点,那么你必须通过将第二个矩形的高度添加到第一个矩形的高度来手动创建一个新的。没有内置功能。

简单地移动第二个矩形的原点,使其低于另一个:

rect2 = CGRectOffset(rect2, 0, rect1.size.height);

答案 1 :(得分:0)

如果我正确地关注你,你会误解矩形:

  

两个单独的CGRect具有相同的尺寸和相同的起点但不同的内容

CGRect本身没有内容,只是原点,宽度和高度。您似乎要做的是通过组合来自其他两个图像的矩形区域来构建单个图像。要执行此操作,您需要创建合适大小的绘图缓冲区,然后将源图像中的矩形区域复制到此缓冲区中。它并不过分复杂,但你需要做一些阅读并了解一些类型。您可以从Cocoa Drawing GuideNSGraphicsContextNSImage开始 - 您可能会使用drawAtPoint:fromRect:operation:fraction:之类的方法从源图像中绘制矩形区域进入你的图形环境。

如果在阅读完文档和设计代码后,您遇到问题,请提出新问题,包含代码并解释问题。毫无疑问,有人会帮助你。

HTH