Как оживить UIImageview для отображения полноэкранного режима, нажав на него? - программирование
Подтвердить что ты не робот

Как оживить UIImageview для отображения полноэкранного режима, нажав на него?

У меня есть UIImageView в UITableviewCell. Когда он прослушивается, UIImageView должен анимироваться, чтобы отображаться в полноэкранном режиме. Когда изображение отображается в полноэкранном режиме, оно должно сжиматься до исходного положения.

Как это можно достичь?

4b9b3361

Ответ 1

Добавить распознаватель жестов в контроллер вида.

Добавьте распознаватель жестов в файл заголовка

@interface viewController : UIViewController <UIGestureRecognizerDelegate>{
    UITapGestureRecognizer *tap;
    BOOL isFullScreen;
    CGRect prevFrame;
}

В вашем представленииDidLoad добавьте это:

isFullScreen = false;
tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imgToFullScreen)];
tap.delegate = self;

Добавьте следующий делегат-метод:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
{
    BOOL shouldReceiveTouch = YES;

    if (gestureRecognizer == tap) {
        shouldReceiveTouch = (touch.view == yourImageView);
    }
    return shouldReceiveTouch;
}

Теперь вам просто нужно реализовать свой метод imgToFullScreen. Убедитесь, что вы работаете с isFullScreen Bool (полноэкранный режим, если он неверен и возвращается к старому размеру, если это правда)

Метод imgToFullScreen зависит от того, как вы хотите, чтобы изображение стало полноэкранным. Один из способов: (это не проверено, но должно работать)

-(void)imgToFullScreen{
    if (!isFullScreen) {
        [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
            //save previous frame
            prevFrame = yourImageView.frame;
            [yourImageView setFrame:[[UIScreen mainScreen] bounds]];
        }completion:^(BOOL finished){
            isFullScreen = true;
        }];
        return;
    } else {
        [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
            [yourImageView setFrame:prevFrame];
        }completion:^(BOOL finished){
            isFullScreen = false;
        }];
        return;
    }
}

Ответ 2

Код из @AzzUrr1, небольшие исправления ошибок (скобки) и tapper реализованы немного иначе.

Работал для меня. Теперь было бы здорово, если бы это было реализовано с помощью scrollView, что пользователь может увеличивать/уменьшать изображение, если изображение больше. Любое предложение?

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController  <UIGestureRecognizerDelegate>{
    UITapGestureRecognizer *tap;
    BOOL isFullScreen;
    CGRect prevFrame;
}
@property (nonatomic, strong) UIImageView *imageView; 

@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    isFullScreen = FALSE;
    tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imgToFullScreen)];
    tap.delegate = self;
    self.view.backgroundColor = [UIColor purpleColor];

    _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 300, 200)];
    _imageView.contentMode = UIViewContentModeScaleAspectFill;
    [_imageView setClipsToBounds:YES];
    _imageView.userInteractionEnabled = YES;
    _imageView.image = [UIImage imageNamed:@"Muppetshow-2.png"];

    UITapGestureRecognizer *tapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imgToFullScreen:)];
    tapper.numberOfTapsRequired = 1;

    [_imageView addGestureRecognizer:tapper];

    [self.view addSubview:_imageView];
}

-(void)imgToFullScreen:(UITapGestureRecognizer*)sender {
    if (!isFullScreen) {
        [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
            //save previous frame
            prevFrame = _imageView.frame;
            [_imageView setFrame:[[UIScreen mainScreen] bounds]];
        }completion:^(BOOL finished){
            isFullScreen = TRUE;
        }];
        return;
    }
    else{
        [UIView animateWithDuration:0.5 delay:0 options:0 animations:^{
            [_imageView setFrame:prevFrame];
        }completion:^(BOOL finished){
            isFullScreen = FALSE;
        }];
        return;
    }
}

Ответ 3

В итоге я использовал MHFacebookImageViewer. Интеграция проста, без подкласса UIImageView, а также имеет масштабирование изображения и смещение.

Для этого требуется AFNetworking (для загрузки большего изображения из URL), вы можете прокомментировать некоторый код (около 10 строк), чтобы удалить эту зависимость. Я могу опубликовать свою бесплатную версию AFNetworking, если кому-то это нужно. Дайте мне знать:)

Ответ 4

Одной из возможных реализаций будет использование модального контроллера представления с UIModalPresentationFullScreen стиль презентации.

Ответ 5

Только что закончил версию в swift, просто загрузите и добавьте в свой проект:

GSSimpleImageView.swift

И использование:

let imageView = GSSimpleImageView(frame: CGRectMake(20, 100, 200, 200))
imageView.image = UIImage(named: "test2.png")
self.view.addSubview(imageView)