私は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つでした:-( – Scotty