Как к увеличению / UIImage возражает, когда пользователь зажимает экран?

Если вы не возражаете, чтобы каждый <li> находился в отдельной колонке, я думаю, что это может сработать:

ul {
  display: inline;
  ...
}

li {
  display: inline-block;
  ...
}

82
задан pasawaya 21 June 2012 в 18:37
поделиться

4 ответа

Другой простой способ сделать это должно поместить Ваш UIImageView в UIScrollView. , Как я описываю здесь , необходимо установить contentSize представления прокрутки для совпадения с Вашим UIImageView's размер. Установите свой экземпляр контроллера, чтобы быть делегатом прокрутки, просматривают и реализуют viewForZoomingInScrollView: и scrollViewDidEndZooming:withView:atScale: методы для обеспечения панорамирования изображения и изменения масштаба повышения. Это эффективно, что решение Ben делает, только немного более легким способом, поскольку у Вас нет издержек полного веб-представления.

Одна проблема, с которой можно столкнуться, - то, что масштабирование в рамках представления прокрутки происходит в форме преобразований, относился к изображению. Это может привести к нерезкости в высоких коэффициентах масштабирования. Для чего-то, что может быть перерисовано, можно следовать за моими предложениями здесь для обеспечения более свежего дисплея после того, как жест повышения закончен. решение hniel могло использоваться в той точке для перемасштабирования изображения.

84
ответ дан Community 24 November 2019 в 09:01
поделиться

Следует иметь в виду, что Вы никогда не увеличиваете масштаб UIImage. КОГДА-ЛИБО.

Вместо этого Вы увеличиваете и уменьшаете масштаб на view, который отображается UIImage.

В данном случае, необходимо принять решение создать пользовательское UIView с пользовательским рисунком для отображения изображения, UIImageView, который отображает изображение для Вас, или UIWebView, которому будет нужен некоторый дополнительный HTML для резервного копирования его.

Во всех случаях, необходимо будет реализовать touchesBegan, touchesMoved, и т.п. для определения то, что пользователь пытается сделать (масштабирование, панорамирование, и т.д.).

19
ответ дан pablasso 24 November 2019 в 09:01
поделиться

Вот решение, которое я использовал, прежде чем это не требует, чтобы Вы использовали UIWebView.

- (UIImage *)scaleAndRotateImage(UIImage *)image
{
    int kMaxResolution = 320; // Or whatever

    CGImageRef imgRef = image.CGImage;

    CGFloat width = CGImageGetWidth(imgRef);
    CGFloat height = CGImageGetHeight(imgRef);


    CGAffineTransform transform = CGAffineTransformIdentity;
    CGRect bounds = CGRectMake(0, 0, width, height);
    if (width > kMaxResolution || height > kMaxResolution) {
        CGFloat ratio = width/height;
        if (ratio > 1) {
            bounds.size.width = kMaxResolution;
            bounds.size.height = bounds.size.width / ratio;
        }
        else {
            bounds.size.height = kMaxResolution;
            bounds.size.width = bounds.size.height * ratio;
        }
    }

    CGFloat scaleRatio = bounds.size.width / width;
    CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
    CGFloat boundHeight;
    UIImageOrientation orient = image.imageOrientation;
    switch(orient) {

        case UIImageOrientationUp: //EXIF = 1
            transform = CGAffineTransformIdentity;
            break;

        case UIImageOrientationUpMirrored: //EXIF = 2
            transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
            transform = CGAffineTransformScale(transform, -1.0, 1.0);
            break;

        case UIImageOrientationDown: //EXIF = 3
            transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;

        case UIImageOrientationDownMirrored: //EXIF = 4
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
            transform = CGAffineTransformScale(transform, 1.0, -1.0);
            break;

        case UIImageOrientationLeftMirrored: //EXIF = 5
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
            transform = CGAffineTransformScale(transform, -1.0, 1.0);
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
            break;

        case UIImageOrientationLeft: //EXIF = 6
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
            break;

        case UIImageOrientationRightMirrored: //EXIF = 7
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeScale(-1.0, 1.0);
            transform = CGAffineTransformRotate(transform, M_PI / 2.0);
            break;

        case UIImageOrientationRight: //EXIF = 8
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
            transform = CGAffineTransformRotate(transform, M_PI / 2.0);
            break;

        default:
            [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];

    }

    UIGraphicsBeginImageContext(bounds.size);

    CGContextRef context = UIGraphicsGetCurrentContext();

    if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {
        CGContextScaleCTM(context, -scaleRatio, scaleRatio);
        CGContextTranslateCTM(context, -height, 0);
    }
    else {
        CGContextScaleCTM(context, scaleRatio, -scaleRatio);
        CGContextTranslateCTM(context, 0, -height);
    }

    CGContextConcatCTM(context, transform);

    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);
    UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return imageCopy;
}

статья может быть найдена на Поддержке Apple в: http://discussions.apple.com/message.jspa?messageID=7276709#7276709

8
ответ дан Shmidt 24 November 2019 в 09:01
поделиться

Самый простой способ сделать это, если все Вы хотите, является изменением масштаба повышения, должен поместить, Ваше изображение в UIWebView (запишите небольшой объем кода обертки HTML, сошлитесь на Ваше изображение, и Вы в основном сделаны). Больше complcated способа сделать это должно использовать touchesBegan, touchesMoved, и touchesEnded, чтобы отслеживать пальцы пользователя и скорректировать свойство преобразования Вашего представления соответственно.

3
ответ дан pablasso 24 November 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: