2011-02-07 13 views
1

私はUITextView(iOS4.2.1 - iPad)を使用して、ユーザーがサイズ変更を行うための「プルダウンウィンドウ」を作成しようとしています。私は、ユーザの指を追跡するためにパンジェスチャ認識器を使用しています。そして、指がどのくらい移動したかに応じて、UITextViewフレームのサイズを変更します。すべての罰金 - フレームが特定のサイズを超えて拡張されると、UITextViewのテキストが「チョップ」されます。テキストとやりとりすると(フリック/スクロールして)、すべて正しく再描画されます。私は非常に小さなプログラムでこれを再現することができます - 以下を参照してください。他に誰もこれを見た?私が試したすべての(つまり、強制的にスクロール位置の設定 - テキストなどを変更する - すべての「仕事」が、持っている欠点)「ハッキング」いつもの任意のポインタを事前にUITextViewはサイズ変更後に「再塗りつぶし」されない

感謝を...

テストそれを再現するためのプログラムは次のとおりです(標準のビューベースのiPadアプリを作成して、メインのViewControllerに貼り付けます)。プログラムを実行して指をページの下にドラッグします。最初の8行ほどのテキストが表示されます。

@implementation TextViewTestViewController 

- (void)createAndLoadTextView 
{ 
    theTextView = [[UITextView alloc] initWithFrame:CGRectZero]; 
    theTextView.font = [UIFont systemFontOfSize:27]; 

    theTextView.backgroundColor = [UIColor redColor]; 
    theTextView.opaque = YES; 

    theTextView.text = @"1 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "2 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "3 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "4 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "5 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "6 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "7 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "8 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "9 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "10 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "11 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "12 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "13 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "14 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "15 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n" 
         "16 sdnaslkdjfnaskjdnfkjsndfsdfknknskdfnlk\n"; 

    [self.view addSubview:theTextView]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self createAndLoadTextView]; 

    UIPanGestureRecognizer* panGesture = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onPanGesture:)] autorelease];  
    [self.view addGestureRecognizer:panGesture]; 

    UITapGestureRecognizer* tapGesture = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapGesture:)] autorelease];  
    [self.view addGestureRecognizer:tapGesture]; 
} 

- (void)onPanGesture:(UIPanGestureRecognizer*)gesture 
{ 
    if (gesture.state == UIGestureRecognizerStateBegan ||gesture.state == UIGestureRecognizerStateChanged) 
    { 
     CGFloat yDelta = [gesture translationInView:self.view].y; 

     [gesture setTranslation:CGPointZero inView:self.view]; 

     theTextView.frame = CGRectMake(0, 0, self.view.bounds.size.width, theTextView.bounds.size.height + yDelta); 
    } 
} 

- (void)onTapGesture:(UIPanGestureRecognizer*)gesture 
{ 
    //'reset' 

    [theTextView removeFromSuperview]; 
    [theTextView release]; 
    theTextView = nil; 

    [self createAndLoadTextView]; 
} 

@end 

答えて

1

ジオメトリを変更した後にテキストビューでsetNeedsDisplayを呼び出すとよいでしょう。

+1

それほど単純ではありませんが、私は恐れています - それは私が試した最初のものの1つでした:-( – Scotty

関連する問題