iPhone UIImageView увеличить масштаб

Я пытался реализовать увеличение / уменьшение масштаба для PhotoView (экземпляр UIImageView), используя CGAffinTransformScale (планируя использовать вращение, поэтому не могу рассчитывать на кадры для масштабирования и добавлю подпредставления, так что UIScrollView будет более сложным, я думаю). Во всяком случае, концепцию было достаточно легко понять, и код собрался очень быстро ... С тех пор я пытался решить те же две (связанные ?!) проблемы, используя три разных подхода, и не смог этого сделать : 1- Мой код каким-то образом теряет счетчик касаний в середине увеличения, от count = 2 до count = 1 и обратно на iPhone, но не на симуляторе. 2. Точки касания 1 и 2 продолжают перемещаться вперед и назад на несколько пикселей при каждом движении, что приводит к последовательному и быстрому уменьшению и увеличению изображения, несмотря на то, что в целом эффект заключается в уменьшении или увеличении в соответствии с намерением пользователя (оба айфон и симулятор).

Вот's код:

#import "PhotoView.h"


@implementation PhotoView;
@synthesize originalCenter, distance, zooming;
- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
    // Initialization code
        self.userInteractionEnabled = YES;
        self.multipleTouchEnabled = YES;
        zooming = NO;
    }
    return self;
}

float distanceBetweenTwoPoints(CGPoint point1, CGPoint point2)
{
 NSLog(@"point1 x: %5.2f point 2 x: %5.2f ---- point 1 y: %5.2f  point 2 y:    %5.2f",point1.x,point2.x,point1.y,point2.y);
    return (sqrt(pow(point1.x -point2.x,2) + pow(point1.y - point2.y,2)));
}
-(void) touchesBegan: (NSSet *) touches withEvent:(UIEvent *) event {

    if ([touches count] > 1) {

      NSLog(@"^^^^^^^^^^^^^^^Tocuhes began with double touch!");

      distance = distanceBetweenTwoPoints([[[touches allObjects] objectAtIndex:0] locationInView:self], 
        [[[touches allObjects] objectAtIndex:1] locationInView:self]);
      zooming = YES;
    }
    else {
       zooming = NO;
       origianlCenter = [[[touches allObjects] objectAtIndex:0] locationInView:self];
       NSLog(@">>>>>>>>>>>>Touches began with single touch");
    }
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    if (zooming) NSLog(@"!!!!!!!!!end zoom!!!!!!!");

    zooming = NO;
    if ([[touches anyObject] tapCount] == 2) {
        UITouch *thisTouch = [touches anyObject];
        CGPoint thisPoint = [thisTouch locationInView:self];
    }
}

- (void) touchesMoved: (NSSet *) touches withEvent:(UIEvent *) event {
    if ([touches count] > 1 && zooming) { // ignore if user added a second finger touch
        float distanceNew = distanceBetweenTwoPoints([[[touches allObjects] objectAtIndex:0]     locationInView:self], 
                 [[[touches allObjects] objectAtIndex:1] locationInView:self]);  
        if (distance 

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

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