我一直在尝试以下代码,将两个UIView与anchorPoint(1,0)相交。
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(50,50, 100, 100)];
v.backgroundColor=[UIColor redColor];
v.layer.anchorPoint=CGPointMake(1,0);
UIView *v2=[[UIView alloc] initWithFrame:CGRectMake(50,50,200,300)];
v2.backgroundColor=[UIColor greenColor];
v2.layer.anchorPoint=CGPointMake(1, 0);
[self.view addSubview:v2];
[self.view addSubview:v];
我对此代码的输出如下所示。
我看起来像红色视图的输出重叠绿色视图,并且它们都具有相同的锚点,如下所示。
答案 0 :(得分:2)
答案 1 :(得分:1)
您的意思是,您希望红色视图是绿色视图和原始红色视图之间重叠区域的大小吗?
如果是的话,
v.frame = CGRectIntersection(v.frame, v2.frame);
答案 2 :(得分:1)
可能有助于描述您的示例中发生的事情:
您在屏幕上放置一个精确尺寸的两个矩形,位于(50, 50)
的确切位置(相对于它们左上角的原点)
他们都有锚点,默认情况下都在他们的中心。
想象一下,将针放在这些中心点。
现在你说你实际上想要右上角的引脚不是中心。
将会发生以下两件事之一
1)矩形将保持静止,并且针脚会自动移动到右上角red:(150, 50)
green:(250, 50)
,这不是您想要的。
或
2)引脚将保持静止,矩形将自行移动,直到它们的右上角位于引脚为red pin:(100, 100)
green pin:(150, 200)
的位置,这也不是您想要的!
第二种选择是实际发生的事情。
根据文档layer.position
相对于layer.anchorPoint
,因此您应尝试将anchorPoint
设置为右上角,然后设置position
矩形图层到您想要的确切位置。例如
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(50,50, 100, 100)];
v.backgroundColor=[UIColor redColor];
v.layer.anchorPoint=CGPointMake(1,0);
v.layer.position = CGPointMake(200, 50);
UIView *v2=[[UIView alloc] initWithFrame:CGRectMake(50,50,200,300)];
v2.backgroundColor=[UIColor greenColor];
v2.layer.anchorPoint=CGPointMake(1, 0);
v2.layer.position = CGPointMake(200, 50);
[self.view addSubview:v2];
[self.view addSubview:v];
只是为了好玩:这是一个动画,展示矩形如何从initWithFrame
的初始位置到相对于其中心的锚点的最终位置。
UIView *v=[[UIView alloc] initWithFrame:CGRectMake(50,50, 100, 100)];
v.backgroundColor=[UIColor redColor];
UIView *v2=[[UIView alloc] initWithFrame:CGRectMake(50,50,200,300)];
v2.backgroundColor=[UIColor greenColor];
[self.view addSubview:v2];
[self.view addSubview:v];
UIView *ap=[[UIView alloc] initWithFrame:CGRectMake(0,0, 10, 10)];
ap.backgroundColor=[UIColor blackColor];
ap.center = v.layer.position;
UIView *ap2=[[UIView alloc] initWithFrame:CGRectMake(0,0, 10, 10)];
ap2.backgroundColor=[UIColor blackColor];
ap2.center = v2.layer.position;
[self.view addSubview:ap];
[self.view addSubview:ap2];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"anchorPoint"];
animation.duration = 2.0;
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(1,0)];
animation.autoreverses = YES;
animation.repeatCount = 10;
[v.layer addAnimation:animation forKey:@"anchorPoint"];
[v2.layer addAnimation:animation forKey:@"anchorPoint"];