UITableviewCellにUIImageViewがあります。タップすると、UIImageViewがアニメーション化されてフルスクリーンで表示されます。フルスクリーンのときに画像をタップすると、元の位置に縮小されます。
これはどのように達成できますか?
ビューコントローラにジェスチャレコグナイザを追加します。
ジェスチャ認識機能をヘッダーファイルに追加します
@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;
}
}
@ AzzUrr1のコード、小さなエラー訂正(括弧)、およびタッパーの実装はわずかに異なります。
私のために働いた。これをscrollViewで実装して、画像が大きい場合にユーザーがズームイン/ズームアウトできるようにすると便利です。何か提案はありますか?
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UIGestureRecognizerDelegate>{
UITapGestureRecognizer *tap;
BOOL isFullScreen;
CGRect prevFrame;
}
@property (nonatomic, strong) UIImageView *imageView;
@end
#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;
}
}
MHFacebookImageViewer を使用することになりました。統合は簡単で、サブクラス化UIImageView
はなく、画像のズームとフリックの解除もあります。
AFNetworking
(URLからより大きな画像をロードするため)が必要ですが、この依存関係を削除するためにいくつかのコード(約10行)をコメントアウトすることができます。誰かが必要な場合は、AFNetworkingのないバージョンを投稿できます。お知らせ下さい :)
考えられる実装の1つは、 IModalPresentationFullScreen プレゼンテーションスタイルでモーダルビューコントローラーを使用することです。
Swiftでバージョンを完成させたばかりです。ダウンロードして、プロジェクトに追加してください。
そして使用法:
let imageView = GSSimpleImageView(frame: CGRectMake(20, 100, 200, 200))
imageView.image = UIImage(named: "test2.png")
self.view.addSubview(imageView)