1

私の問題はCGRect、ズームインのためにズームした後、正確な値を取得できないことUIScrollviewです。ズーム中にプロパティを設定しています。zoomToRectUIScrollviewcontentOffset

コードは次のとおりです。

if(image != nil) {

        CGSize zoomViewSize = image.frame.size;


        CGSize scrollViewSize = self.bounds.size;

        if(zoomViewSize.width < scrollViewSize.width) {
            anOffset.x = -(scrollViewSize.width - zoomViewSize.width) / 2.0;
        }

        if(zoomViewSize.height < scrollViewSize.height) {
            anOffset.y = -(scrollViewSize.height - zoomViewSize.height) / 2.0;
        }
    }
super.contentOffset = anOffset;

ズームした後、画像が中央に来るようにコンテンツインセットプロパティを設定しています。コンテンツインセットのコードを以下に示します。

-(void)zoomtorect:(CGRect)rect animated:(BOOL)animated {

[super zoomtorect:rect animated:YES];


CGFloat pageWidth = image.image.size.height;



         CGSize imageSize = rect.size;
         CGSize zoomedImageSize = CGSizeMake(imageSize.width * 0.2, imageSize.height * 0.2);
         CGSize pageSize = self.bounds.size;

         //scLayer.frame = rect;
         UIEdgeInsets inset = UIEdgeInsetsZero;
         if (pageSize.width > zoomedImageSize.width) {
             inset.left = (pageSize.width - zoomedImageSize.width) / 2;
             inset.right = inset.left;
         }
         if (pageSize.height > zoomedImageSize.height) {
             inset.top = (pageSize.height - zoomedImageSize.height) / 2;
             inset.bottom = inset.top;
         }

         self.contentInset = inset;
}

このコードは、画像ビューを画面間でシフトします。ここではすべてがうまく機能します。私の問題は、imageView残りの部分のズーム部分のみを表示する必要があることです。ズーム領域を計算するために、次の計算を行っています。

CGSize imageSize = rect.size;
    CGSize zoomedImageSize = CGSizeMake(imageSize.width * scroll.maximumZoomScale, imageSize.height *scroll.maximumZoomScale);
    CGSize pageSize = scroll.bounds.size;

    UIEdgeInsets inset = UIEdgeInsetsZero;
    if (pageSize.width > zoomedImageSize.width) {
        inset.left = (pageSize.width - zoomedImageSize.width) / 2;
        inset.right = inset.left;
    }
    if (pageSize.height > zoomedImageSize.height) {
        inset.top = (pageSize.height - zoomedImageSize.height) / 2;
        inset.bottom = inset.top;
    }

    CGRect zoomRect = [scroll convertRect:rect fromView:image];

    CGRect zoomRect1 = CGRectMake(inset.left, inset.top+50, zoomRect.size.width, zoomRect.size.height);

これzoomRect1は画像の拡大された領域です。この値は、画面に表示されているものと正確ではありません。私が計算ミスをしているいくつかの場所で私を助けてください。しかし、ズームされた画像領域の正確な値が得られません。

前もって感謝します

4

1 に答える 1

1

これを使用してください..完璧に動作します

- (void)handleDoubleTap:(UIGestureRecognizer *)recognizer
{
    if(isAlreadyZoomed)
    {
        CGPoint Pointview = [recognizer locationInView:recognizer.view];
        CGFloat newZoomscal = 3.0;
        CGSize scrollViewSize = self.scrollContainer.bounds.size;
        CGFloat width = scrollViewSize.width/newZoomscal;
        CGFloat height = scrollViewSize.height /newZoomscal;
        CGFloat xPos = Pointview.x-(width/2.0);
        CGFloat yPos = Pointview.y-(height/2.0);
        CGRect rectTozoom=CGRectMake(xPos, yPos, width, height);
        [self.scrollContainer zoomToRect:rectTozoom animated:YES];
        [self.scrollContainer setZoomScale:3.0 animated:YES];
        isAlreadyZoomed = NO;
    }
    else
    {
        [self.scrollContainer setZoomScale:1.0 animated:YES];
        isAlreadyZoomed = YES;
    }
}

isAlreadyZoomedBOOL値です

于 2013-03-22T09:27:30.237 に答える