我有一个bottomView(UIView)和一个topView(UIView)。 bottomView有一个红色背景,在IB中,我将topView设置为clearColor,将Opaque设置为OFF。 通过以下代码,我实现了在topView上创建矩形/窗口并在底部打孔的目标:
- (void)drawRect:(CGRect)rect
{
// Drawing code
CGRect holeRect = CGRectMake(100, 100, 100, 100);
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
// Start by filling the area with the blue color
[[UIColor blueColor] setFill];
UIRectFill( rect );
// Assume that there's an ivar somewhere called holeRect of type CGRect
// We could just fill holeRect, but it's more efficient to only fill the
// area we're being asked to draw.
CGRect holeRectIntersection = CGRectIntersection( holeRect, rect );
[[UIColor clearColor] setFill];
UIRectFill( holeRectIntersection );
}
现在 - 我想让矩形/窗口可移动。我已将ViewController设置为UIGestureRecognizerDelegate,并且在实现文件中,在viewDidLoad中具有以下代码,这些代码在另一个项目中适用于我:
//为每个ImageView创建平移手势识别器 UIPanGestureRecognizer * pan1Recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self 动作:@selector(handlePan1From:)];
// set self as delegate for gesture recognition
[pan1Recognizer setDelegate:self];
// setup the selector for the pan gesture
pan1Recognizer.minimumNumberOfTouches = 1;
pan1Recognizer.maximumNumberOfTouches = 1;
[XXX addGestureRecognizer:pan1Recognizer];
// ensure user interaction is ENABLED !!!!
[XXX setUserInteractionEnabled:YES];
挑战是,上面的XXX。在我的另一个项目中,我在IB中有一个子视图,其中定义了一个插座,因此我可以明确地引用它。但是在这个项目中,我在上面的drawRect中创建了rect,并且不确定如何建立连接。
任何帮助表示赞赏!
答案 0 :(得分:0)
我能够将我创建的Rect与手势控制下的UIView对齐,并通过将它们一起移动来解决它。可能不是最优雅的方法,但是它有效并且我已经被这个问题困住了一个多星期,所以非常喜欢这个和所有人!
答案 1 :(得分:0)
创建
@property (nonatomic, strong) UIView *holerectView;
然后将视图设置为rect框架:
_rect = CGRectMake(100, 100, 100, 100);
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
不要用颜色填充矩形;只需为视图创建背景颜色。
_holerectView = [[UIView alloc] initWithFrame:_rect];
_holerectView.backgroundColor = [UIColor redColor];
[self addSubview:_holeRectView];
在这里:
[_holeRectView addGestureRecognizer:pan1Recognizer];