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