2011-10-30 18 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を設定)することをお勧めしますフレームと同じ位置にあります。

次に、ジェスチャーのエンドで、変換をIDにリセットしてフォントサイズを変更します。

view.transform = CGAffineTransformIdentity; 
fontSize = startFontSize * factor; 
関連する問題