2013-12-17 3 views
0

Я пытаюсь подклассифицировать UIScrollView как «ImageScrollView». Мой класс довольно прост. Он имеет изображениеView как одно из его подзонов, которое я хочу, чтобы класс увеличивал масштаб.Установить масштаб для подкласса 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 

Добавление подкласса как подтаблицы моего ViewController работает нормально за исключением прокруткой:

#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 

Мой первый думаю, что это имеет какое-то отношение к делегату, который не был правильно реализован для подкласса жопа. Какие-либо предложения?

+0

Вы смотрели эту тему Http: //stackoverflow.com/questions/3657451/ How-to-enable-zoom-in-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. Установите minimumZoomScale или maximumZoomScale (или и)
  3. Реализовать viewForZoomingInScrollView: вернуться вид для увеличения
+0

Спасибо, я уже пробовал self.delegate = self, а также super.delegate = self, но он дает ошибку: присваивание 'id ' из несовместимого типа 'ImageScrollView * __ strong' – DJSK

+0

Выяснил это. Мне также пришлось удалить анимированный метод zoom(): zoomToRect: (CGRect) rect animated: (BOOL). Это противоречило методу делегата. Благодарю. – DJSK

Смежные вопросы