Как сделать ImageView масштабируемым с или без ScrollView.?

у меня естьUImageView в моемIB и добавил изображение карты на этомUImageView, Я хочу сделать это изображение масштабируемым.

Вот мой код:

- (void)viewDidLoad
{
   [super viewDidLoad];
    self.title = @"Map";

   self.mapImageView.contentMode = UIViewContentModeScaleAspectFit;
   [self.mapScrollView addSubview:self.mapImageView];
   [self.mapScrollView setContentSize:CGSizeMake(self.mapImageView.frame.size.width, self.mapImageView.frame.size.height)];
   [self.mapScrollView setMinimumZoomScale:1.0];
   [self.mapScrollView setMaximumZoomScale:4.0];
}

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

но это нене могу помочь, я вижуUIScrollView Приближается, но с моим изображением ничего не происходит.

Заранее спасибо.

 Marcin Kuptel21 мая 2013 г., 11:00
Что вы подразумеваете под "возвращаясь к предыдущему состоянию "?
 Marcin Kuptel21 мая 2013 г., 10:54
Вы установили делегат вашего вида прокрутки?
 Zac2421 мая 2013 г., 10:57
Я установил делегата только сейчас. теперь это'с увеличением, но в то же время возвращаясь к предыдущему состоянию, котороеt решить цель масштабирования.
 Nitin Gohel21 мая 2013 г., 11:01
в то время как вы перемещаете один контроллер представления в другой, который ViewDidLoad вызывает из второго контроллера представления, но пока выдает секод в первое представление, тогда ViewDidLoad не вызывается из fistView, вызванного его ViewwillAppear, поэтому поместите свой код в ViewWillAppear
 Zac2421 мая 2013 г., 11:02
когда я зажимаю экран и убираю пальцы с экрана, он просто увеличивает и уменьшает масштаб одновременно.
 Zac2421 мая 2013 г., 11:03
Я не использую другой viewController для увеличения.
 Zac2421 мая 2013 г., 11:17
получить что-то подобное в моей консоли. Игнорирование звонка[UIPanGestureRecognizer setTranslation:inView:] так как распознаватель жестов не активен

Ответы на вопрос(3)

попробуй с этим

    //At ViewDidLoad (OR whare you create your mapImageView)
   UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
   [pinchRecognizer setDelegate:self];
   [mapImageView addGestureRecognizer:pinchRecognizer];

   mapImageView.userInteractionEnabled=YES;




   -(void)scale:(id)sender {
       [YourView bringSubviewToFront:[(UIPinchGestureRecognizer*)sender view]];

       if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
           lastScale = 1.0;  //global float variable.
           return;
       }

       CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);

       CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
       CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);

       [[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];
   }
 Zac2421 мая 2013 г., 12:10
приложение упало. Завершение работы приложения из-за необработанного исключенияNSInternalInconsistencyException»Причина: '<> + <1: 1>* 0x1f5b0560.marker + <1: -0,5>* 0x1f5b5e70.marker + <1: 0,5>* 0x1f5b5f50.marker + <1: 1>* 0x1f5bbc40.marker + <1: 1>* 0x1f5c1760.marker + <1: 1>* 0x1f5c2a00.marker + <1: 0,5>* 0x1f5c4150.marker: внутренняя ошибка. Установка пустого вектора для переменной tempToBeOptimizedToZero. '
 SAMIR RATHOD21 мая 2013 г., 12:14
на какой линии он разбился ..
 Zac2421 мая 2013 г., 11:52
куда добавить этот фрагмент кода.?
 SAMIR RATHOD21 мая 2013 г., 11:58
при viewdidload ...
 Zac2421 мая 2013 г., 12:17
Подождите. я'Я буду отлаживать и выложу здесь.

сделать это безscrollViewДобавьте этот фрагмент в свой класс:

-(void) addGesturesTo : (UIImageView *) imageView{
    // Register for double-finger dragging to pan the camera.
    UIPinchGestureRecognizer* pinchGestureReconizer = [[UIPinchGestureRecognizer alloc] initWithTarget: self                                                                                                    action: @selector(handlePich:)];
    [imageView addGestureRecognizer:pinchGestureReconizer];
}
- (void) handlePich: (UIPinchGestureRecognizer *) pinchGestureRecognizer{
    CGFloat scale = pinchGestureRecognizer.scale;
    [[pinchGestureRecognizer view]  setTransform:CGAffineTransformScale([pinchGestureRecognizer view].transform, scale, scale)];
    pinchGestureRecognizer.scale = 1.0;
}

Сейчас звонитеaddGesturesTo сimageView, Как:

[self addGesturesTo:imageView];

Чтобы сделать это с ScrollView: выполните следующие действия:

добавлятьscrollView установить делегата на себядобавлятьimageView внутриscrolViewвоплощать в жизнь- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; в вашем классе и вернутьсяimageView
 Zac2421 мая 2013 г., 12:12
у меня нет autolayout, у меня есть авторазмер subview, и у меня есть отметка для этого.
 Zac2421 мая 2013 г., 12:03
("", "", "") Will attempt to recover by breaking constraint
 rptwsthi21 мая 2013 г., 11:52
Где бы ты ни хотел. ВviewDidLoad может быть.
 rptwsthi21 мая 2013 г., 12:06
Есть ли у вас автопоставка в вашем представлении (отметьте это в xib и в первом разделе инспектора), если да, попробуйте отключить его, затем проверьте.
 Zac2421 мая 2013 г., 12:04
Сломайте objc_exception_throw, чтобы поймать это в отладчике. Методы в категории UIConstraintBasedLayoutDebugging в UIView перечислены в <UIKit / UIView.h> также может быть полезным это то, что я получаю в консоли.
 Zac2421 мая 2013 г., 11:53
Хорошо, я'Я пытаюсь
 rptwsthi21 мая 2013 г., 12:15
Задайте другой вопрос для этой проблемы тогда.
 Zac2421 мая 2013 г., 11:51
обойтись без scrollView. я удалю scrollView из моего viewController и добавлю этот фрагмент кода в мой класс, но потом, где это вызвать.[self addGesturesTo:imageView];
 Zac2421 мая 2013 г., 11:59
получил что-то подобное в консоли. Невозможно одновременно удовлетворить ограничения. Вероятно, по крайней мере одно из ограничений в следующем списке - это то, что вы не можетене хочу Попробуйте это: (1) посмотрите на каждое ограничение и попытайтесь выяснить, какиене ожидаю; (2) найдите код, который добавил нежелательное ограничение или ограничения, и исправьте его. (Примечание: если вывы видите NSAutoresizingMaskLayoutConstraints, которые вы неt понять, обратитесь к документации для свойства UIView translatesAutoresizingMaskIntoConstraints)

добавлятьUIScrollViewDelegate в вашемViewController.h файл

затем добавьте следующий код к вашемуViewController.m файл

Не нужно добавлятьUIPinchGestureRecognizer если вы используете этот код

    - (void)scrollViewDidZoom:(UIScrollView *)scrollView
    {

    UIView* zoomView = [scrollView.delegate viewForZoomingInScrollView:scrollView];

    CGRect zoomViewFrame = zoomView.frame;

    if(zoomViewFrame.size.width < scrollView.bounds.size.width)

    {

    zoomViewFrame.origin.x = (scrollView.bounds.size.width - zoomViewFrame.size.width) / 2.0;

    }

    else

    {
    zoomViewFrame.origin.x = 0.0;
    }

    if(zoomViewFrame.size.height < scrollView.bounds.size.height)

     {      zoomViewFrame.origin.y = (scrollView.bounds.size.height - zoomViewFrame.size.height) / 2.0;

    }
    else

    {
    zoomViewFrame.origin.y = 0.0;
    }
    zoomView.frame = zoomViewFrame;
    }

менятьviewDidLoad следующее

- (void)viewDidLoad
 {
     [super viewDidLoad];
    self.mapScrollView.delegate = self;
    self.mapScrollView.minimumZoomScale = 1.0;
    self.mapScrollView.maximumZoomScale = 4.0;
    UIImage * myImage= [UIImage imageNamed:@"Background.png"]; //add your image here
    [self.mapImageView setImage:myImage];
    [self.mapImageView sizeToFit];
    self.mapScrollView.contentSize = myImage.size;

}

Укажите imageView для увеличения здесь

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

Чтобы избежать странного поведения UIScrollView на zoomimg, используйте этот метод

- (void)view:(UIView*)view setCenter:(CGPoint)centerPoint
{
    CGRect viewFrame = view.frame;
        CGPoint contentOffset = self.mapScrollView.contentOffset;

        CGFloat x = centerPoint.x - viewFrame .size.width / 2.0;
        CGFloat y = centerPoint.y - viewFrame .size.height / 2.0;

    if(x < 0)
    {
        contentOffset.x = -x;
        viewFrame .origin.x = 0.0;
    }
    else
    {
        viewFrame .origin.x = x;
    }
    if(y < 0)
    {
        contentOffset.y = -y;
        viewFrame .origin.y = 0.0;
    }
    else
    {
        viewFrame .origin.y = y;
    }

    view.frame = viewFrame ;
    self.mapScrollView.contentOffset = contentOffset;
}

Затем вызовите вышеупомянутый метод на viewDidAppear

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    CGPoint centerPoint = CGPointMake(CGRectGetMidX(self.mapScrollView.bounds),
                                  CGRectGetMidY(self.mapScrollView.bounds));
    [self view:self.mapImageView setCenter:centerPoint];
}

Посмотри на этоссылка на сайт если вам нужно больше разъяснений. Я изучил эту технику по этой ссылке.

 Madhu25 июн. 2013 г., 23:21
@ Zac24 Вы решили эту проблему? Если так, пожалуйста, опубликуйте решение. У меня похожая проблема, и она сохраняется, несмотря на попытки разных решений.
 Zac2401 июл. 2013 г., 11:39
@ Джордж: Я попробовал ваше решение и посмотрел на ссылку, но это не такКажется, что работает, все еще странное поведение Zooms y ранее я перешел к методу увеличения. Но я хотел бы иметь масштабирование по краю, чтобы увеличить.
 George21 мая 2013 г., 15:42
1. Откройте .xib и добавьте UIScrollview 2. и добавьте UIImageView в этот UIScrollview 3.create IBOutlet 's для UIScrollview и UIImageView и подключите его к .xib. 4. добавить UIScrollViewDelegate в viewController.h, как показано ниже @interface ScrollxViewController: UIViewController <UIScrollViewDelegate> 5. создать свойства в viewController.h и синтезировать свойства в viewController.m 6. изменить viewDidLoad, scrollViewDidZoom и viewForZoomingInScrollView, как указано выше. 7. построить и запустить изображение увеличит. если вам нужен полный код, пожалуйста, дайте мне знать, я буду загружать его
 Zac2422 мая 2013 г., 14:47
извините за крайний поздний ответ, и я очень благодарен вам, но все еще есть некоторые проблемы. остроумие, используя ваш код этозум, но не правильно, этоs масштабирование по горизонтали и сжатие по вертикали, так что на этом изображении ничего нет. надеюсь, вы понимаете проблему здесь.
 George23 мая 2013 г., 09:13
Вы можете отослать эту ссылку для дальнейшего разъяснения. они указали, как центрировать contentview (iosdeveloperzone.com/2012/07/07/...)
 Zac2423 мая 2013 г., 14:47
хорошо, спасибо. я'Я буду ссылаться на эту ссылку.
 Zac2421 мая 2013 г., 13:45
Я использую ваш код сейчас, но ничего не произошло. как я использовал твой код, пошагово, дай мне знать, если я сделал какие-либо ошибки. 1) добавил в IB scrollView и отправил его обратно, установив делегат в виде файла 's владелец 2) удалить весь мой код, указанный выше. 3) вставьте свой код после viewDidLoad. 4) Запустите код и ничего не произойдет.

Ваш ответ на вопрос