我创建了一个对角线UIView,在所有四个边缘的所有角落和中心都有八个子视图。
所有红点均可拖动以调整钻石形状。
所有Subview在Diagonal UIView中添加一次见图像Screen1 ..
现在我不想要钻石视图的传递框架,所以它可以管理中心和红点的框架。 我需要使用Autoresizemask进行管理,所以我不需要在增加或减少时通过每个时间帧。
这是为钻石形状创建红点的代码..
view4 = [[CustomDotRD alloc] initWithFrame:CGRectMake(self.frame.size.width - self.frame.size.width/4 - RED_W_H_RD/2, self.frame.size.height - self.frame.size.height/4 - RED_W_H_RD/2, RED_W_H_RD, RED_W_H_RD)];
view4.backgroundColor = [UIColor clearColor];
UIPanGestureRecognizer *panGestureDiamond = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(singleFingerTapsDiamond:)];
[view4 addGestureRecognizer:panGestureDiamond];
[panGestureDiamond release];
[view4 setContextPropertyColor:RGB_RED contextFrame:CGRectMake(RED_W_H/2, RED_W_H/2, RED_W_H, RED_W_H) index:4 tag:kTAG_D4];
view4.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
view4.center = CGPointMake(self.frame.size.width - self.frame.size.width/4, self.frame.size.height - self.frame.size.height/4);
[self addSubview:view4];
[self.boundDiamondArray addObject:view4];
这里我发布了一些图片,同时增加钻石形状,一些红点有奇怪的行为..
以下是屏幕2中所有红点的所有自动调整大小的掩码。
1 - BottomMargin , LeftMargin , RightMargin
2 - TopMargin , BottomMargin , LeftMargin , RightMargin
3 - TopMargin , BottomMargin , LeftMargin
4 - TopMargin , BottomMargin , LeftMargin , RightMargin
5 - TopMargin , LeftMargin , RightMargin
6 - TopMargin , BottomMargin , LeftMargin , RightMargin
7 - TopMargin , BottomMargin , RightMargin
8 - TopMargin , BottomMargin , LeftMargin , RightMargin
四角红点工作正常.. 但是四个中心边缘红点不能完美地工作.. 让我展示一些屏幕......
让我知道你解决这个问题的想法..
请记住,我不想传递任何框架或中心只需使用自动调整大小管理。
了解AutoresizeMask Link的有用链接。
问候,
答案 0 :(得分:2)
自动调整大小对您无法正常工作,因为由于红点的高度,topMargin / bottomMargin比率对于边缘中心的点不完全是3。如果您的宽度和高度为零的点,它将被正确定位。
我认为实施layoutSubviews
方法对您的任务来说是更好的解决方案。
如果您真的想仅使用autoresizingMask
解决此问题。您需要将每个红点放在一个零大小的视图中,并在菱形视图中添加零大小的视图。使用下面的代码而不是您提供的代码。您可能需要对其他部分进行一些更改,因为这些点不再是钻石的直接子视图。
view4 = [[CustomDotRD alloc] initWithFrame:CGRectMake(-RED_W_H_RD/2, -RED_W_H_RD/2, RED_W_H_RD, RED_W_H_RD)];
view4.backgroundColor = [UIColor clearColor];
UIPanGestureRecognizer *panGestureDiamond = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(singleFingerTapsDiamond:)];
[view4 addGestureRecognizer:panGestureDiamond];
[panGestureDiamond release];
[view4 setContextPropertyColor:RGB_RED contextFrame:CGRectMake(RED_W_H/2, RED_W_H/2, RED_W_H, RED_W_H) index:4 tag:kTAG_D4];
UIView* dotView4 = [[CustomView alloc] initWithFrame:CGRectZero];
dotView4.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
dotView4.center = CGPointMake(self.frame.size.width - self.frame.size.width/4, self.frame.size.height - self.frame.size.height/4);
[dotView4 addSubview:view4];
[self addSubview:dotView4];
[dotView4 release];
[self.boundDiamondArray addObject:view4];
要解决触摸事件的问题,您应该覆盖pointInside:withEvent:
课程中UIView
的{{1}}方法。以下代码将确保即使触摸点位于视图边界之外,触摸事件也会到达子视图。
CustomView