こんにちは!
ZoomImageViewというクラスを作りました。
指の操作で画像の拡大縮小移動ができます。
UIViewを継承して作ってあります。
ストーリーボードで静的にUIViewを設置して
Custom ClassとしてZoomImageViewを指定した場合には
画像が表示されるのですが、
動的にZoomImageViewを作成した場合には、表示されません。
動的に生成した場合に画像が表示される方法はないでしょうか?
Objective
1 2#import "ViewController.h" 3 4@interface ViewController () 5 6@end 7 8@implementation ViewController 9 10- (void)viewDidLoad 11{ 12 [super viewDidLoad]; 13 // Do any additional setup after loading the view, typically from a nib. 14 15 ZoomImageView *iv=[[ZoomImageView alloc] initWithFrame:CGRectMake(0,0,320,250)]; 16 [iv setImage:[UIImage imageNamed:@"ic_launcher-web"]]; 17 [_iv2 setImage:[UIImage imageNamed:@"ic_launcher-web"]]; 18} 19 20#import "ZoomImageView.h" 21 22@interface ZoomImageView ()<UIGestureRecognizerDelegate> 23 24@property(nonatomic, strong) UIImageView *imageView; 25@property(nonatomic, assign) float scale; 26@property(nonatomic, assign) BOOL isChange; 27@property(nonatomic, assign) CGAffineTransform defaultTransform; 28 29@end 30 31 32@implementation ZoomImageView 33 34-(id)init{ 35 self = [super init]; 36 if ( self ) { 37 [self initialization]; 38 } 39 40 return self; 41} 42 43- (id)initWithFrame:(CGRect)frame 44{ 45 self = [super initWithFrame:frame]; 46 if (self) { 47 // Initialization code 48 [self initialization]; 49 } 50 return self; 51} 52 53-(id)initWithCoder:(NSCoder *)aDecoder 54{ 55 self = [super initWithCoder:aDecoder]; 56 if (self) { 57 // Initialization code 58 [self initialization]; 59 } 60 return self; 61} 62 63// 初期化 64-(void)initialization 65{ 66 // 拡大縮小 67 UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(zoomImage:)]; 68 pinch.delegate = self; 69 [self addGestureRecognizer:pinch]; 70 71 // 移動 72 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveImage:)]; 73 [self addGestureRecognizer:pan]; 74 75 // 画像を設定 76 _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 77 [_imageView setContentMode:UIViewContentModeScaleAspectFit]; 78 [self setClipsToBounds:YES]; 79 [self addSubview:_imageView]; 80 81 // 初期設定 82 _isChange = false; 83 _scale = 1.0f; 84} 85 86// 画像設定 87-(void)setImage:(UIImage*)image 88{ 89 [_imageView setImage:image]; 90} 91 92// 拡大 93- (void)zoomImage:(UIGestureRecognizer*)sender { 94 if (!_isChange && sender.state == UIGestureRecognizerStateBegan) { 95 _isChange = true; 96 _defaultTransform = _imageView.transform; 97 } 98 else if (_isChange && sender.state == UIGestureRecognizerStateEnded) { 99 _isChange = false; 100 _scale = 1.0f; 101 return; 102 } 103 104 if( sender.state == UIGestureRecognizerStateEnded ) { 105 return; 106 } 107 108 _scale = ((UIPinchGestureRecognizer*)sender).scale; 109 CGAffineTransform transform = CGAffineTransformConcat( CGAffineTransformConcat(_defaultTransform, CGAffineTransformMakeRotation(0)), 110 CGAffineTransformMakeScale(_scale, _scale)); 111 _imageView.transform = transform; 112} 113 114// 移動 115- (void)moveImage:(UIPanGestureRecognizer *)sender { 116 // 座標計算 117 CGPoint translation = [sender translationInView:[_imageView superview]]; 118 CGPoint movedPoint = CGPointMake(_imageView.center.x + translation.x, _imageView.center.y + translation.y); 119 // 移動 120 [_imageView setCenter:movedPoint]; 121 [sender setTranslation:CGPointZero inView:_imageView]; 122} 123 124@end 125
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。