如何从 CGPoint 和 CGSize 创建 CGRect?
Posted
技术标签:
【中文标题】如何从 CGPoint 和 CGSize 创建 CGRect?【英文标题】:How do I create a CGRect from a CGPoint and CGSize? 【发布时间】:2012-08-17 07:37:03 【问题描述】:我需要从CGSize
和CGPoint
的不同集合中为UIImageView
创建一个框架,这两个值总是会根据用户的选择而有所不同。那么我怎样才能使CGRect
形成CGPoint
和CGSize
?提前谢谢你。
【问题讨论】:
【参考方案1】:Objective-C 的两个不同选项:
CGRect aRect = CGRectMake(aPoint.x, aPoint.y, aSize.width, aSize.height);
CGRect aRect = aPoint, aSize ;
斯威夫特 3:
let aRect = CGRect(origin: aPoint, size: aSize)
【讨论】:
您在第二个示例中使用了哪种运算符? 这是一个复合文字。它们是 C 的一部分,在 C99 中标准化。 在 XCODE 5 中它提出:预期的表达式。这是正确的语法: (CGRect)aPoint, aSize @Pion:不,它没有。该代码运行良好,并且在最新版本的 Xcode 中不会产生任何警告。我假设您正在使用不同的代码,而不是初始化局部变量。如果您想做一些事情,例如将复合文字作为方法参数传递,则需要强制转换,但只是为了初始化局部变量,您不需要强制转换。 我作为参数传递,这就是答案;)【参考方案2】:基于@Jim 的最佳答案,还可以使用这种方法构造一个 CGPoint 和一个 CGSize 。所以这些也是制作 CGRect 的有效方法:
CGRect aRect = aPoint.x, aPoint.y, aSize ;
CGrect aRect = aPoint, aSize.width, aSize.height ;
CGRect aRect = aPoint.x, aPoint.y, aSize.width, aSize.height ;
【讨论】:
【参考方案3】:CGRectMake(yourPoint.x, yourPoint.y, yourSize.width, yourSize.height);
【讨论】:
【参考方案4】:您可以使用一些糖语法。例如:
这类似于构造块,您可以将其用于更易读的代码:
CGRect rect = (
CGRect customCreationRect
//make some calculations for each dimention
customCreationRect.origin.x = CGRectGetMidX(yourFrame);
customCreationRect.origin.y = CGRectGetMaxY(someOtherFrame);
customCreationRect.size.width = CGRectGetHeight(yetAnotherFrame);
customCreationRect.size.height = 400;
//By just me some variable in the end this line will
//be assigned to the rect va
customCreationRect;
)
【讨论】:
以上是关于如何从 CGPoint 和 CGSize 创建 CGRect?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 NSShadow 和 CALayer 的 shadowOffset 通过 CGSize 类型而不是 CGPoint 类型表示
ios开发之--CGRect/CGSize/CGPoint/CGVector/CGAffineTransform/UIEdgeInsets/UIOffset和NSString之间的转换