当我像这样应用panDetected时,图像在屏幕上无处不在。我只希望此功能位于特定矩形的顶部。我应该改变什么?

-(void) panDetected: (UIPanGestureRecognizer * ) panRecognizer {
    CGPoint translation = [panRecognizer translationInView: self.documentImageView];
    CGPoint imageViewPosition = self.documentImageView.center;
    imageViewPosition.x += translation.x;
    imageViewPosition.y += translation.y;

    self.documentImageView.center = imageViewPosition;
    [panRecognizer setTranslation: CGPointZero inView: self.view];
}


这只是允许我放大图片,而只能从中间点放大图片上的每个点。

-(void) handlePinchWithGestureRecognizer: (UIPinchGestureRecognizer * ) pinchGestureRecognizer {

    CGFloat lastScale = 1.0;
    if ([pinchGestureRecognizer state] == UIGestureRecognizerStateBegan) {
        // Reset the last scale, necessary if there are multiple objects with different scales
        lastScale = [pinchGestureRecognizer scale];
    }

    if ([pinchGestureRecognizer state] == UIGestureRecognizerStateBegan || [pinchGestureRecognizer state] == UIGestureRecognizerStateChanged) {

        CGFloat currentScale = [
            [
                [pinchGestureRecognizer view].layer valueForKeyPath: @
                "transform.scale"] floatValue];

        // Constants to adjust the max/min values of zoom
        const CGFloat kMaxScale = 1.15;
        const CGFloat kMinScale = 1.0;

        CGFloat newScale = 1 - (lastScale - [pinchGestureRecognizer scale]);
        newScale = MIN(newScale, kMaxScale / currentScale);
        newScale = MAX(newScale, kMinScale / currentScale);
        self.documentImageView.transform = CGAffineTransformScale(self.documentImageView.transform, newScale, newScale);

        lastScale = [pinchGestureRecognizer scale]; // Store the previous scale factor for the next pinch gesture call
    }
}

-(void) setExtractedImageForTableView: (UIImage * ) extractedImage {
    self.documentImageView.image = nil;
    self.documentImageView = nil;
    self.documentImageView = [
        [UIImageView alloc] initWithImage: extractedImage];

    self.documentImageView.userInteractionEnabled = YES;
    UIPinchGestureRecognizer * pinchGestureRecognizer = [
        [UIPinchGestureRecognizer alloc] initWithTarget: self action: @selector(handlePinchWithGestureRecognizer: )];
    [self.documentImageView addGestureRecognizer: pinchGestureRecognizer];

    UIPanGestureRecognizer * panRecognizer = [
        [UIPanGestureRecognizer alloc] initWithTarget: self action: @selector(panDetected: )];
    [self.documentImageView addGestureRecognizer: panRecognizer];

    self.documentImageView.contentMode = UIViewContentModeScaleAspectFit;
    if (!CGSizeEqualToSize(extractedImage.size, CGSizeZero)) {
        self.documentImageView.frame = CGRectMake(CGRectGetMinX(self.view.frame), CGRectGetMinY(self.tableView.frame), CGRectGetWidth(self.view.frame), (extractedImage.size.height / extractedImage.size.width) * CGRectGetWidth(self.view.frame));
        self.tableView.tableHeaderView = self.documentImageView;
        [self.tableView setContentOffset: CGPointZero animated: YES];
        CGRect frame = self.documentImageView.frame;
        frame.size.height = self.documentImageView.frame.size.height + 100;
        self.tableView.frame = CGRectMake(0, 0, 200, 200);
        self.tableView.tableHeaderView.frame = frame;
    }
}

最佳答案

您可以使用UIGestureRecognizerDelegate实现此目的。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
       shouldReceiveTouch:(UITouch *)touch


上面的方法询问委托人,手势识别器是否应该接收代表触摸的对象。因此,您可以检查触摸位置并在NO不在所需区域时返回。

10-07 19:54
查看更多