2011-10-30 211 views
3

我想增加和缩小字体大小与捏和进出。但是下面的手势非常缓慢。如何优化它作为UIWebView工作。如何优化UIPinchGestureRecognizer增加和减小字体大小?

- (void)viewDidLoad { 

     textView.text = @"fdsakllllllllllllllllllllllllllllllfadsjksadfjkjkasdfjkjksfjkdajkasfdjkjhasdfhhjasdfhadfjkskasfdjkjkahsfdjkasdfjkjkasfdkjfsdahkafsdjkadjksfjkajksdfjkasdfkafjksdajksdffdsakllllllllllllllllllllllllllllllfadsjksadfjkjkasdfjkjksfjkdajkasfdjkjhasdfhhjasdfhadfjkskasfdjkjkahsfdjkasdfjkjkasfdkjfsdahkafsdjkadjksfjkajksdfjkasdfkafjksdajksdffdsakllllllllllllllllllllllllllllllfadsjksadfjkjkasdfjkjksfjkdajkasfdjkjhasdfhhjasdfhadfjkskasfdjkjkahsfdjkasdfjkjkasfdkjfsdahkafsdjkadjksfjkajksdfjkasdfkafjksdajksdffdsakllllllllllllllllllllllllllllllfadsjksadfjkjkasdfjkjksfjkdajkasfdjkjhasdfhhjasdfhadfjkskasfdjkjkahsfdjkasdfjkjkasfdkjfsdahkafsdjkadjksfjkajksdfjkasdfkafjksdajksfsdjkadjksfjkajksdfjkasdfkafjksdajksdffdsakllllllllllllllllllllllllllllllfadsjksadfjkjkasdfjkjksfjkdajkasfdjkjhasdfhhjasdfhadfjkskasfdjkjkahsfdjkasdfjkjkasfdkjfsdahkafsdjkadjksfjkajksdfjkasdfkafjksdajksdffdsakllllllllllllllllllllllllllllllfadsjksadfjkjkasdfjkjksfjkdajkasfdjkjhasdfhhjasdfhadfjkskasfdjkjkahsfdjkasdfjkjkasfdkjfsdahkafsdjkadjksfjkajksdfjkasdfkafjksdajksdffdsakllllllllllllllllllllllllllllllfadsjksadfjkjkasdfjkjksfjkdajkasfdjkjhasdfhhjasdfhadfjkskasfdjkjkahsfdjkasdfjkjkasfdkjfsdahkafsdjkadjksfjkajksdfjkasdfkafjksdajksdf"; 

    UIPinchGestureRecognizer *pinchGesture = 
    [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)]; 

    pinchGesture.delegate = self; 
    /*textView.maximumZoomScale = 3; 

    textView.minimumZoomScale = .5; 
    */ 

    [textViewHadith addGestureRecognizer:pinchGesture]; 
    [pinchGesture release]; 

    // [textViewHadith setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"blackback ground.png"]]]; 


} 

- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender { 
    // static CGRect initialBounds; 

    static int fontSize = 20; 

    // UIView *_view = sender.view; 

    if (sender.state == UIGestureRecognizerStateBegan) 
     { 
    // initialBounds = _view.bounds; 
     } 
    CGFloat factor = [(UIPinchGestureRecognizer *)sender scale]; 


    // NSLog(@"factor = %f",factor); 


    if(factor > 1.0) 
     { 
     fontSize +=1;   

     } 
    else 
     { 

     fontSize -= 1; 

     } 

    // NSLog(@"font = %d",fontSize); 
    if (fontSize >50) { 
     fontSize =50; return; 
    } 

    if (fontSize <5) { 
     fontSize = 5; return; 
    } 

    [textView setFont:[UIFont fontWithName:@"Helvetica" size:fontSize]]; 

    // CGAffineTransform zt = CGAffineTransformScale(CGAffineTransformIdentity, factor, factor); 
    // _view.bounds = CGRectApplyAffineTransform(initialBounds, zt); 
    return; 
} 


-(void) viewDidUnload 
{ 
    textView = nil; 
} 

@end 

回答

3

您的代码将增加或减少每个触摸事件的字体大小,而不考虑手指的移动量。这可能不会给用户预期的结果。

相反,您应该在手势开始时记录字体大小,并计算相对于基于比例的字体大小。

例如

fontSize = startFontSize * factor; 

此外,该代码将运行很多次第二,并改变字体大小可能是一个昂贵的操作,因为它必须“回流”的文字。相反,我会建议一个更便宜的操作,只是为了让用户反馈某些事情正在发生,但是延迟了实际的预期操作。只设置视图的变换:

view.transform = CGAffineTransformMakeScale(factor, factor); 

您可能还需要调整边界(并设置clipsToBounds),以便它出现的观点保持相同的框架和姿态下的文本的位置停留在框架和相同的位置。

然后在手势的结束处,重置变换以标识和修改字体大小。

view.transform = CGAffineTransformIdentity; 
fontSize = startFontSize * factor; 
相关问题