Assignment #3 Finished Tasks

Please note, this blog entry is from a previous course. You might want to check out the current one.

The complete code of the mandatory tasks of assignment #3 can be found at github.

Addendum Task #7

The previously shown code for the pinch: method would zoom using the origin of the axis as center point thus moving a graph out of view if the currently shown area is not close to the origin. To provide a proper zoom function where the zoom happens centered to the touching point the origin has to adjusted as well as the scale:

- (CGPoint)pointOfTouch:(CGPoint)touch
    CGPoint point;
    point.x = (touch.x - self.dataSource.origin.x) / self.dataSource.scale;
    point.y = (touch.y - self.dataSource.origin.y) / self.dataSource.scale;    
    return point;

- (void)setOriginFor:(CGPoint)point forTouch:(CGPoint)touch
    CGPoint origin;
    origin.x = touch.x - point.x * self.dataSource.scale;
    origin.y = touch.y - point.y * self.dataSource.scale;
    self.dataSource.origin = origin;    

- (void)pinch:(UIPinchGestureRecognizer *)gesture
    if ((gesture.state != UIGestureRecognizerStateChanged) &&
        (gesture.state != UIGestureRecognizerStateEnded)) return;
    CGPoint touch = [gesture locationInView:self];
    CGPoint point = [self pointOfTouch:touch];    
    self.dataSource.scale *= gesture.scale;
    gesture.scale = 1; 
    [self setOriginFor:point forTouch:touch];

Leave a Reply

Your email address will not be published.