web-dev-qa-db-ja.com

UIImageviewをアニメーション化して、タップしてフルスクリーンで表示するにはどうすればよいですか?

UITableviewCellにUIImageViewがあります。タップすると、UIImageViewがアニメーション化されてフルスクリーンで表示されます。フルスクリーンのときに画像をタップすると、元の位置に縮小されます。

これはどのように達成できますか?

15
murze

ビューコントローラにジェスチャレコグナイザを追加します。

ジェスチャ認識機能をヘッダーファイルに追加します

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

ViewDidLoadにこれを追加します:

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

次のdelegateメソッドを追加します。

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

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

ここで、imgToFullScreenメソッドを実装する必要があります。 isFullScreen Boolを使用していることを確認してください(falseの場合はフルスクリーン、trueの場合は古いサイズに戻します)

ImgToFullScreenメソッドは、画像をフルスクリーンにする方法によって異なります。 1つの方法は次のようになります:(これはテストされていませんが、機能するはずです)

-(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;
    }
}
28
arnoapp

@ AzzUrr1のコード、小さなエラー訂正(括弧)、およびタッパーの実装はわずかに異なります。

私のために働いた。これを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;
    }
}
6
jerik

MHFacebookImageViewer を使用することになりました。統合は簡単で、サブクラス化UIImageViewはなく、画像のズームとフリックの解除もあります。

AFNetworking(URLからより大きな画像をロードするため)が必要ですが、この依存関係を削除するためにいくつかのコード(約10行)をコメントアウトすることができます。誰かが必要な場合は、AFNetworkingのないバージョンを投稿できます。お知らせ下さい :)

2
Hlung

考えられる実装の1つは、 IModalPresentationFullScreen プレゼンテーションスタイルでモーダルビューコントローラーを使用することです。

1
Michael Mangold

Swiftでバージョンを完成させたばかりです。ダウンロードして、プロジェクトに追加してください。

GSSimpleImageView.Swift

そして使用法:

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