Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在自定义UICollectionViewcell中缩放图像视图_Ios_Objective C_Iphone_Uiscrollview_Zooming - Fatal编程技术网

Ios 在自定义UICollectionViewcell中缩放图像视图

Ios 在自定义UICollectionViewcell中缩放图像视图,ios,objective-c,iphone,uiscrollview,zooming,Ios,Objective C,Iphone,Uiscrollview,Zooming,在自定义UICollectionViewCell中缩放UIImageView时,将缩放整个单元格。我希望将UIImageView放大为iPhone照片中的照片库 #define widthOfBlackTransVw 30 #define ZOOM_STEP 2.0 @implementation DetailedImageCell - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame];

在自定义
UICollectionViewCell
中缩放
UIImageView
时,将缩放整个单元格。我希望将
UIImageView
放大为iPhone照片中的照片库

#define widthOfBlackTransVw 30
 #define ZOOM_STEP 2.0

@implementation DetailedImageCell

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        self.scrollView = [UIScrollView new];
        self.scrollView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
        self.scrollView.delegate = self;
        self.scrollView.userInteractionEnabled  = YES;
        self.scrollView.bouncesZoom = YES;
        [self addSubview:self.scrollView];

        self.imageView = [UIImageView new];
        self.imageView.frame = self.scrollView.frame;
        self.imageView.userInteractionEnabled = YES;
        self.imageView.clipsToBounds = YES;
        [self.scrollView addSubview:self.imageView];


        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
        UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
        UITapGestureRecognizer *twoFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTwoFingerTap:)];

        [singleTap setNumberOfTapsRequired:1];
        [doubleTap setNumberOfTapsRequired:2];
        [twoFingerTap setNumberOfTouchesRequired:2];

        //Adding gesture recognizer
        [self.imageView addGestureRecognizer:singleTap];
        [self.imageView addGestureRecognizer:doubleTap];
        [self.imageView addGestureRecognizer:twoFingerTap];
        [singleTap requireGestureRecognizerToFail:doubleTap];


        float minimumScale = 1.0;
        self.scrollView.maximumZoomScale = 6.0;
        self.scrollView.minimumZoomScale = minimumScale;
        self.scrollView.zoomScale = minimumScale;
        [self.imageView setContentMode:UIViewContentModeScaleAspectFit];
        [self.scrollView setContentSize:self.imageView.bounds.size];
    }
    return self;
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageView;
}

- (void)scrollViewDidZoom:(UIScrollView *)aScrollView
{
    CGFloat offsetX = (self.scrollView.bounds.size.width > self.scrollView.contentSize.width)?
    (self.scrollView.bounds.size.width - self.scrollView.contentSize.width) * 0.5 : 0.0;
    CGFloat offsetY = (self.scrollView.bounds.size.height > self.scrollView.contentSize.height)?
    (self.scrollView.bounds.size.height - self.scrollView.contentSize.height) * 0.5 : 0.0;
    self.imageView.center = CGPointMake(self.scrollView.contentSize.width * 0.5 + offsetX,
                                   self.scrollView.contentSize.height * 0.5 + offsetY);


}  
- (void)handleDoubleTap:(UIGestureRecognizer *)gestureRecognizer {
    // zoom in
    float newScale = [self.scrollView zoomScale] * ZOOM_STEP;

    if (newScale > self.scrollView.maximumZoomScale){

        newScale = self.scrollView.minimumZoomScale;
        CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]];

        [self.scrollView zoomToRect:zoomRect animated:YES];
    }
    else{

        newScale = self.scrollView.maximumZoomScale;
        CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]];

        [self.scrollView zoomToRect:zoomRect animated:YES];
        }
}

- (void)handleTwoFingerTap:(UIGestureRecognizer *)gestureRecognizer
 {
    float newScale = [self.scrollView zoomScale] / ZOOM_STEP;
    CGRect zoomRect = [self zoomRectForScale:newScale withCenter:[gestureRecognizer locationInView:gestureRecognizer.view]];
    [self.scrollView zoomToRect:zoomRect animated:YES];

}
- (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center {

    CGRect zoomRect;

    // the zoom rect is in the content view's coordinates.
    //    At a zoom scale of 1.0, it would be the size of the self.scrollView's bounds.
    //    As the zoom scale decreases, so more content is visible, the size of the rect grows.
    zoomRect.size.height = [self.scrollView frame].size.height / scale;
    zoomRect.size.width  = [self.scrollView frame].size.width  / scale;

    // choose an origin so as to get the right center.
    zoomRect.origin.x    = center.x - (zoomRect.size.width  / 2.0);
    zoomRect.origin.y    = center.y - (zoomRect.size.height / 2.0);

    return zoomRect;
}

单元格额外空间随
UIImage
一起缩放。我只需要缩放
UIImageView

你想使用点击手势方法缩放图像是,也可以使用按压按钮如果你使用按压手势,你想设置最小和最大的缩放级别检查我设置的代码。我可以缩放所有内容,但我的问题是整个单元格正在缩放。在self.imageView.frame=self.scrollView.frame中设置帧;试试看