2013-12-17 56 views
0

我想將子類UIScrollView作爲「ImageScrollView」。我的課很簡單。它有一個imageView作爲它的子視圖之一,我希望類可以放大。設置縮放UIScrollView子類

ImageScrollView.h

#import <UIKit/UIKit.h> 

@interface ImageScrollView : UIScrollView 

@property (nonatomic, strong) UIImageView *imageView; 

- (id)initWithFrame:(CGRect)frame andImage:(UIImage *)image; 

@end 

ImageScrollView.m

#import "ImageScrollView.h" 

@interface ImageScrollView() 

@property CGFloat scaleWidth; 
@property CGFloat scaleHeight; 

@end 

@implementation ImageScrollView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (id)initWithFrame:(CGRect)frame andImage:(UIImage *)image 
{ 
    self = [super init]; 
    if(self) 
    { 
     self.frame = frame; 

     self.imageView = [[UIImageView alloc]initWithImage:image]; 
     [self addSubview:self.imageView]; 

     self.contentSize = self.imageView.bounds.size; 

     self.scaleWidth = self.frame.size.width/image.size.width; 
     self.scaleHeight = self.frame.size.height/image.size.height; 
     CGFloat minScale = MIN(self.scaleWidth, self.scaleHeight); 

     self.maximumZoomScale = 1.0f; 
     self.minimumZoomScale = minScale; 
     [self setZoomScale:minScale]; 

     [self zoomToRect:self.imageView.frame animated:NO]; 
    } 
    return self; 
} 


@end 

添加子類作爲我的視圖 - 控制的子視圖的工作除了滾動就好:

#import "ViewController.h" 
#import "ImageScrollView.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ImageScrollView *imageScrollView = [[ImageScrollView alloc]initWithFrame:self.view.bounds andImage:[UIImage imageNamed:@"1.jpg"]]; 
    [self.view addSubview:imageScrollView]; 
    } 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

我的第一個猜測是它與代理沒有正確地爲subcl實現有關屁股。有什麼建議麼?

+0

你看了這個題目的http://stackoverflow.com/questions/3657451/如何啓用放大在uiscrollview –

+0

也在這裏是文檔https://developer.apple.com/library/ios/documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html –

+0

謝謝,但我的問題是繼承UIScrollView並使縮放工作。 – DJSK

回答

0

想通了。我不得不添加委託聲明並刪除 - (void)zoomToRect:(CGRect)rect animated:(BOOL)動畫。下面是任何人的情況下,答案需要它?

ImageScrollView.h

#import <UIKit/UIKit.h> 

@interface ImageScrollView : UIScrollView <UIScrollViewDelegate> 

@property (nonatomic, strong) UIImageView *imageView; 

- (id)initWithFrame:(CGRect)frame andImage:(UIImage *)image; 

@end 

ImageScrollView.m

#import "ImageScrollView.h" 

@interface ImageScrollView() 

@property CGFloat scaleWidth; 
@property CGFloat scaleHeight; 

@end 

@implementation ImageScrollView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (id)initWithFrame:(CGRect)frame andImage:(UIImage *)image 
{ 
    self = [super init]; 
    if(self) 
    { 
     self.frame = frame; 
     self.delegate = self; 

     self.imageView = [[UIImageView alloc]initWithImage:image]; 
     [self addSubview:self.imageView]; 

     self.contentSize = self.imageView.bounds.size; 

     self.scaleWidth = self.frame.size.width/image.size.width; 
     self.scaleHeight = self.frame.size.height/image.size.height; 
     CGFloat minScale = MIN(self.scaleWidth, self.scaleHeight); 

     self.maximumZoomScale = 1.0f; 
     self.minimumZoomScale = minScale; 
     [self setZoomScale:minScale]; 
    } 
    return self; 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return self.imageView; 
} 
1

基礎知識在UIScrollView

  1. 設置滾動視圖代表縮放(確保你設置爲代表的類符合UIScrollViewDelegate。你的情況,這是一樣的東西self.delegate = self
  2. 設置minimumZoomScalemaximumZoomScale(或兩者)
  3. 實施viewForZoomingInScrollView:返回視圖進行縮放
+0

謝謝,我已經嘗試self.delegate =自我也super.delegate = self,但它給出了錯誤:指派給'id '從不兼容的類型'ImageScrollView * __強' – DJSK

+0

想通了。我還必須刪除 - (void)zoomToRect:(CGRect)rect animated:(BOOL)動畫方法。它與代表方法衝突。謝謝。 – DJSK