AGGeometryKit 1.2.9

AGGeometryKit 1.2.9

测试已测试
Lang语言 Obj-CObjective C
许可证 NOASSERTION
发布最新发布2018年10月

Håvard Fossli维护。



  • 作者:
  • Håvard Fossli, Logan Holmes, Jørund Almås和Marcus Eckert

AGGeometryKit

Build Status

在CALayer上实现四边形(可以单独控制每个角点),CGGeometry函数、UIView/CALayer属性以及其他非常有价值工具。

安装

pod 'AGGeometryKit'
Swift中导入
import AGGeometryKit
Objective-C中导入
#import <AGGeometryKit/AGGeometryKit.h>

演示

Demo video
在vimeo上查看视频

结合POP使用,这可以让您完成一些真正令人印象深刻的任务。访问AGGeometryKit+POP

Demo video
在vimeo上查看视频

四边形

四边形是一个有四条边(或边线)和四个顶点或角落的多边形。AGGeometryKit 允许您单独控制每个角落点。

您可以将 quadrilateral 作为属性,就像使用 frame、center 或 bounds 一样访问。坐标与 frame 和 position 所在的坐标系相同。您可以在任何 UIView 或 CALayer 上使用四边形,甚至 webview,其性能与不使用它时一样好。底层技术是 CATransform3D。更多关于四边形的信息:http://en.wikipedia.org/wiki/Quadrilateral

UIView *view = ...; // create a view
[view.layer ensureAnchorPointIsSetToZero]; // set the anchor point to [0, 0] (this method keeps the same position)

AGKQuad quad = view.layer.quadrilateral;
quad.br.x += 20; // shift bottom right x-value with 20 pixels
quad.br.y += 50; // shift bottom right y-value with 50 pixels

view.layer.quadrilateral = quad; // the quad is converted to CATransform3D and applied

UIView 和 CALayer 属性

以下是一些添加到 UIView 和 CALayer 中的属性示例。命名方式与 CGRectGetMaxX 相同,以确保一致性。

...
@property (nonatomic, assign) CGPoint frameOrigin;
@property (nonatomic, assign) CGFloat frameMinX;
@property (nonatomic, assign) CGFloat frameMinY;
@property (nonatomic, assign) CGFloat frameMidX;
@property (nonatomic, assign) CGFloat frameMidY;
@property (nonatomic, assign) CGFloat frameMaxX;
@property (nonatomic, assign) CGFloat frameMaxY;
@property (nonatomic, assign) CGFloat frameWidth;
@property (nonatomic, assign) CGFloat frameHeight;
...

CGGeometry-扩展

一些最有用的函数

...
CGRect  CGRectInterpolate_AGK(CGRect rect1, CGRect rect2, CGFloat progress);
CGSize  CGRectGapBetween_AGK(CGRect rect1, CGRect rect2);
CGPoint CGPointClamp_AGK(CGPoint p, CGFloat minX, CGFloat maxX, CGFloat minY, CGFloat maxY);
CGPoint CGPointAdd_AGK(CGPoint p1, CGPoint p2);
...

数学

一些最有用的函数

...
CGFloat AGKInterpolate(CGFloat startValue, CGFloat endValue, CGFloat progress);
CGFloat AGKRemapToZeroOne(CGFloat value, CGFloat startValue, CGFloat endValue);
CGFloat AGKRemap(CGFloat value, CGFloat oldStartValue, CGFloat oldEndValue, CGFloat newStartValue, CGFloat newEndValue);
CGFloat AGKRemapAndClamp(CGFloat value, CGFloat oldStartValue, CGFloat oldEndValue, CGFloat newStartValue, CGFloat newEndValue);
CGFloat AGKRemapToZeroOneAndClamp(CGFloat value, CGFloat oldStartValue, CGFloat oldEndValue);
CGFloat AGKClamp(CGFloat value, CGFloat min, CGFloat max);

CGFloat AGKRadiansToDegrees(CGFloat radians);
CGFloat AGKDegreesToRadians(CGFloat degrees);
...

调试四边形

  • 使用四边形时,anchorPoint 必须始终为 {0, 0}
  • 四边形必须是凸四边形
  • 不要修改框架,而应使用 layer.positionview.center 以及 layer.boundsview.bounds
  • 四边形不能与其他 CATransform3D 物件(如透视、缩放、旋转等)一起使用
  • 请记住,quadrilateral 属性的坐标系与 frameposition 的相同
  • 检查自动调整大小遮罩是否会修改框架(要确保用于调试,请关闭 autoresizesSubviews

使用UIBezierPath创建您试图显示的四边形的表示也有帮助。

UIView *quadPreview = [[UIView alloc] init];
quadPreview.frame = quadView.frame;
quadPreview.layer.shadowPath = [UIBezierPath bezierPathWithAGQuad:quad].CGPath;
quadPreview.layer.shadowColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.5].CGColor;
quadPreview.layer.shadowOpacity = 1.0;
quadPreview.layer.shadowRadius = 0.0;
quadPreview.layer.shadowOffset = CGSizeZero;
quadPreview.backgroundColor = [UIColor clearColor];
[quadView.superview addSubview:quadPreview];

有用链接

关键词

凸四边形,简单四边形,切线,风筝,菱形,正方形,梯形,梯形,平行四边形,内心四边形,圆内四边形

联系方式

您可以通过twitter上的@hfossli联系到我。

此项目由谁创建?

Agens.no是一家位于挪威奥斯陆的公司,得到了一些非常聪明的Stack Overflow.com网友的帮助。