将一个Rect连接到手势识别器进行平移?

时间:2013-02-23 18:06:33

标签: ios6 gestures

我有一个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,并且不确定如何建立连接。

任何帮助表示赞赏!

2 个答案:

答案 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];