【问题标题】:Image not centered vertically in scrollview图像未在滚动视图中垂直居中
【发布时间】:2020-01-27 19:19:41
【问题描述】:

我错过了什么?内部滚动视图和图像视图填满了整个屏幕。但不知何故,我的形象没有居中。图像的左上角从视图的中心开始,但我想让图像很好地居中。也在缩放期间。

-(void)prepareScrollView
{
    for(int i =0;i<[self.layoverPhotoAssets count];i++){
        PHAsset *asset = self.layoverPhotoAssets[i];

        FMImageZoomViewController *zoomController = [[FMImageZoomViewController alloc] init];
//        UIImageView *imageView = [[UIImageView alloc] init];
        int x = self.scrollView.frame.size.width * i;
        zoomController.view.frame = CGRectMake(x, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height);
        //zoomController.view.frame = CGRectMake(0,0,self.view.bounds.size.width,self.view.bounds.size.height);
        [self.scrollView addSubview:zoomController.view];
        zoomController.zoomScroller.delegate = self;
        zoomController.imageView.tag = 1;
        [self.zoomControllers addObject:zoomController];

        PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
        options.resizeMode = PHImageRequestOptionsResizeModeFast;
        options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; //I only want the highest possible quality
        options.synchronous = NO;
        options.networkAccessAllowed = YES;
        [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:zoomController.zoomScroller.frame.size contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage *result, NSDictionary *info) {
        dispatch_async(dispatch_get_main_queue(), ^{
            if(result){
                zoomController.imageView.image = result;
                zoomController.imageView.backgroundColor = [UIColor redColor];
            }
        });
        }];

        //self.scrollView.contentSize= ;
    }
    [self.scrollView setContentSize:CGSizeMake(self.scrollView.frame.size.width * [self.layoverPhotoAssets count], 0)];
    [self scrollToAsset:self.selectedAsset];
}

【问题讨论】:

    标签: objective-c uiscrollview uiimageview


    【解决方案1】:

    考虑:

        zoomController.view.frame = CGRectMake(x, 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height);
        [self.scrollView addSubview:zoomController.view];
    

    这不可能。如果zoomController.view 是self.scrollView 的子视图,则它在self.scrollView 内的框架是根据self.scrollView 的bounds,而不是@ 的frame 987654326@.

    【讨论】:

    • 这是真的,谢谢...但是没有效果,因为两个滚动视图都占据了整个屏幕..图像仍然太大或未居中
    【解决方案2】:

    这样解决了:

    -(void)prepareScrollView
    {
        for(int i =0;i<[self.layoverPhotoAssets count];i++){
            PHAsset *asset = self.layoverPhotoAssets[i];
    
            FMImageZoomViewController *zoomController = [[FMImageZoomViewController alloc] init];
    //        UIImageView *imageView = [[UIImageView alloc] init];
            int x = self.scrollView.frame.size.width * i;
            zoomController.view.frame = CGRectMake(x, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height);
            //zoomController.view.frame = CGRectMake(0,0,self.view.bounds.size.width,self.view.bounds.size.height);
            [self.scrollView addSubview:zoomController.view];
            zoomController.zoomScroller.delegate = self;
            [self.zoomControllers addObject:zoomController];
    
            PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
            options.resizeMode = PHImageRequestOptionsResizeModeExact;
            options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; //I only want the highest possible quality
            options.synchronous = NO;
            options.networkAccessAllowed = YES;
            [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:zoomController.zoomScroller.bounds.size   contentMode:PHImageContentModeAspectFit options:options resultHandler:^(UIImage *result, NSDictionary *info) {
            dispatch_async(dispatch_get_main_queue(), ^{
                if(result){
                    zoomController.imageView = [[UIImageView alloc] initWithImage:result];
                    zoomController.imageView.frame = zoomController.zoomScroller.bounds;
                    [zoomController.imageView setContentMode:UIViewContentModeScaleAspectFit];
                    zoomController.imageView.clipsToBounds = YES;
                    [zoomController.imageView setCenter: self.scrollView.center];
                    zoomController.imageView.tag = 1;
                    [zoomController.zoomScroller addSubview:zoomController.imageView];
    
    //                zoomController.imageView.contentMode = UIViewContentModeCenter;
    //                if (zoomController.imageView.bounds.size.width > result.size.width && zoomController.imageView.bounds.size.height > result.size.height) {
    //                       zoomController.imageView.contentMode = UIViewContentModeScaleAspectFit;
    //                }
                }
            });
            }];
    
            //self.scrollView.contentSize= ;
        }
        [self.scrollView setContentSize:CGSizeMake(self.scrollView.frame.size.width * [self.layoverPhotoAssets count], 0)];
        [self scrollToAsset:self.selectedAsset];
    }
    

    【讨论】:

    • 对不起,但在我看来,您解决问题的方法是按照我的回答去做。
    猜你喜欢
    • 2020-01-07
    • 2020-01-27
    • 1970-01-01
    • 2010-12-30
    • 2015-12-21
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多