Изображение не по центру вертикально в scrollview - PullRequest
1 голос
/ 27 января 2020

Чего мне не хватает? Внутренний вид прокрутки и вид изображения заполняют весь экран. Но почему-то мой образ не центрирован. Верхний левый угол изображения начинается в центре вида, но я бы хотел, чтобы изображение было хорошо отцентрировано. Также во время увеличения.

-(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];
}

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Решил так:

-(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];
}
0 голосов
/ 27 января 2020

Рассмотрим:

    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, а не кадрам из self.scrollView .

...