2012-08-09 50 views
0

我有一个CGRect ACGRect B和其中B被的A内部中心(一个CGRect包含x和y原点和高度和矩形的宽度尺寸)。如果我将A的宽度和高度按一定比例增加,并且还将B的宽度和高度按相同比例增加,则会将B的x原点和B的y原点乘以相同的比例(对于宽度和高度恭敬地),这将保持BA的中心,因为都增长了新的比例?我已经在几种不同的情况下测试了这一点,它的工作原理,但只是想验证它可以适用于所有情况,因为我在数学上并不那么敏锐。计算其大小后insetted的CGRect的新原点改变

另外,想知道是否有一种方法可以简单地让您按比例乘以CGRect的所有值,而无需手动执行(在文档中找不到)。

更新:实际上,这不会工作...试图想到一种方法,这将允许我正确地在另一个视图中定位视图后,两者的比例增加。

+0

如果你不想你的问题得到解答,请不要把它们放在stackoverflow上。重现问题需要时间,提出解决方案并将其发布到此处。 – 2012-08-13 07:19:22

+0

@AndreasLey - 我很感激你花时间写出答案,但是在我提到的两件事情中,你的回答都是错误的,即1)如果乘以相同的比例而不是正确的位置,你说“是的,你提议的作品”。然后我问道文档中是否有一个方法可以将矩形的所有值相乘,并且您为我手动地写出了一些很酷的方法,但它很简单,我可以自己做。如果苹果在图书馆里有一个,那就好奇。 – 2012-08-13 17:51:33

+1

你的问题不明确。我为您的问题的原始版本和更新版本提供了正确的解决方案。仅仅因为它不是你所期望的并不意味着这是不正确的。另外,请记住,其他人会使用stackoverflow,他们会通过Google找到此页面。他们也想知道提议的解决方案是否有效。 – 2012-08-14 08:14:05

回答

2

是的,你提出的建议是有效的,但前提是CGRect的原点是0,0,或者你的原点乘以因子。如果你不这样做,那么内部矩将会转移到右下角。

这里,如果你多个来源和规模都发生了什么:

center CGRect in CGRect

如果不乘外RECT的起源,发生这种情况:

enter image description here

从你的问题,你试图达到的目标并不完全清楚。 如果你想放大一个CGRect和(重新)中心是一个又一个,使用这些功能:

// center a CGRect in another one 
static inline CGRect ALRectCenterInRect(CGRect outerRect, CGRect innerRect) 
{ 
    return CGRectMake(CGRectGetMidX(outerRect)-innerRect.size.width/2, CGRectGetMidY(outerRect)-innerRect.size.height/2, innerRect.size.width, innerRect.size.height); 
} 

// multiply each value of a CGRect with factor 
//  combine with CGRectIntegral() to prevent fractions (and the resulting aliasing) 
static inline CGRect ALRectMultiply(CGRect rect, CGFloat factor) 
{ 
    return CGRectMake(rect.origin.x*factor, rect.origin.y*factor, rect.size.width*factor, rect.size.height*factor); 
} 

如何使用它们:

CGRect centeredInnerRect = ALRectCenterInRect(outerRect, innerRect); 

CGRect multipliedRect = ALRectMultiply(someRect, 1.5); 

然而,随着CGRect小号打交道时,它通常是约UIView s。如果你想在它的父居中一个UIView,做到这一点:

someSubview.center = CGPointMake(CGRectGetMidX(someSuperview.bounds), CGRectGetMidY(someSuperview.bounds)); 

如果内视图具有相同的上海华盈的外观图,你可以简单地做到这一点,以居中的外观图:

innerView.center = outerView.center; 
+0

对您自己的代码使用CoreGraphics前缀可能不是一个好主意。 – 2012-08-09 09:29:01

+0

@ Paul.s先生,您是对的。谢谢。 :) – 2012-08-09 09:34:00

+1

-1使用#define而不是内联函数。 – Abizern 2012-08-09 09:35:30