FullScreen image through tap on TableCell's image

半世苍凉 提交于 2019-12-08 13:03:06

问题


I'm trying to show a fullscreen picture from a smaller one included in a custom UITableViewCell. My code is highly linked to this article

By the way, in this example, the frame : [[UIScreen mainScreen] bounds]is not the good one for me. It's the an UIScrollView's bounds that I've got. I this to add the main screen through a variable inside the cell directly when each cell is created. So I've customized the previous example like this :

//viewDidLoad
self.globalView.frame = [[UIScreen mainScreen] bounds];

//cellForRowAtIndexPath
[cell setFullScreenView:self.globalView];

//fullScreenMethod
if (!isFullScreen) {
    [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
        //save previous frame
        prevFrame = imageView.frame;
        [imageView setFrame:self.fullScreenView.frame];
    }completion:^(BOOL finished){
        isFullScreen = YES;
    }];
    return;
}

My problem is that the imageView's new frame is not a full screen but still the UIScrollView's one.

Thank you for your help !


回答1:


Best approach is create one temporary UIImageView and Show it in full screen, For animation simply add the temporary UIImageView to location where the image view exists and animate it to full-screen and do revers for normal

Add tap gesture to UIImageView and add this bannerTapped as selector

     //This will create a temporary imaget view and animate it to fullscreen
            - (void)bannerTapped:(UIGestureRecognizer *)gestureRecognizer {
                NSLog(@"%@", [gestureRecognizer view]);
                //create new image
                temptumb=(UIImageView *)gestureRecognizer.view;

                //fullview is gloabal, So we can acess any time to remove it
                fullview=[[UIImageView alloc]init];
                  [fullview setContentMode:UIViewContentModeScaleAspectFit];
                [fullview setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"bckgrd.png"]]];
                fullview.image = [(UIImageView *)gestureRecognizer.view image];
                    CGRect point=[self.view convertRect:gestureRecognizer.view.bounds fromView:gestureRecognizer.view];
                [fullview setFrame:point];

                [self.view addSubview:fullview];
                [UIView animateWithDuration:0.5
                                 animations:^{
                                     [fullview setFrame:CGRectMake(0,
                                                                   0,
                                                                   self.view.bounds.size.width,
                                                                   self.view.bounds.size.height)];
                                 }];
                UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(fullimagetapped:)];
                singleTap.numberOfTapsRequired = 1;
                singleTap.numberOfTouchesRequired = 1;
                [fullview addGestureRecognizer:singleTap];
                [fullview setUserInteractionEnabled:YES];
            }

        //This will remove the full screen and back to original location.

            - (void)fullimagetapped:(UIGestureRecognizer *)gestureRecognizer {

                CGRect point=[self.view convertRect:temptumb.bounds fromView:temptumb];

                gestureRecognizer.view.backgroundColor=[UIColor clearColor];
                [UIView animateWithDuration:0.5
                                 animations:^{
                                     [(UIImageView *)gestureRecognizer.view setFrame:point];
                                 }];
                [self performSelector:@selector(animationDone:) withObject:[gestureRecognizer view] afterDelay:0.4];

            }

//Remove view after animation of remove
            -(void)animationDone:(UIView  *)view
            {
                //view.backgroundColor=[UIColor clearColor];
                [fullview removeFromSuperview];
                fullview=nil;
            }



回答2:


It can't take a full screen frame because its parent view is the scrollView. Either show view modally or somehow move imageView directly under view controller's main view.



来源:https://stackoverflow.com/questions/23053694/fullscreen-image-through-tap-on-tablecells-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!