1

大量のテキストを表示し、一度にページを表示し、ユーザーが左右にスクロールできるようにすることで、その中を移動できるビューに取り組んでいます。

コンテンツの幅を画面の倍数に設定するとともに、pagingEnabledプロパティをYESに設定したUIScrollView内にUITextViewを配置することで、それができると思いました。

表示されるのは最初のページだけですが、右にフリックすると他の空白のページが表示されます。誰でもヒントを与えることができます。これがコードです...

label = [[UITextView alloc] initWithFrame: scroller.frame];

label.editable = NO;

label.scrollEnabled = NO;

label.multipleTouchEnabled = NO;

label.userInteractionEnabled = NO;

label.font = [UIFont systemFontOfSize: 14.0];

// Get text 
std::string str;

// Next line gets a single string, which is from 2000 to 8000

//characters long
str = GetStringContent();

NSString * nsStr = [NSString stringWithCString: str.c_str()];

// Measure text that will display in one page.
CGRect rect = CGRectMake(0.0, 0.0, scroller.frame.size.width, scroller.frame.size.height);
CGSize calcSize = [nsStr sizeWithFont: [UIFont systemFontOfSize: 14.0] 
constrainedToSize: rect.size lineBreakMode: UILineBreakModeWordWrap];
rect.size = calcSize;

CGRect maxRect = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 99999.0);

CGSize maxCalcSize = [nsStr sizeWithFont: [UIFont systemFontOfSize: 14.0] 

constrainedToSize: maxRect.size lineBreakMode: UILineBreakModeWordWrap];

float pages = maxCalcSize.height / self.view.bounds.size.height;

int numberOfPages = (int)ceil(pages);

// Set text
label.text = [NSString stringWithCString: str.c_str()];

// Setup scroller
scroller.scrollEnabled = YES;

scroller.pagingEnabled = YES;

scroller.bounces = YES;


scroller.contentSize = CGSizeMake(label.frame.size.width * numberOfPages, scroller.frame.size.height);


scroller.contentOffset = CGPointMake(0, 0); 

scroller.frame = rect;

scroller.clipsToBounds = YES;

[scroller addSubview: label];

[label sizeToFit];

ビューは IB で作成され、UIScrollView が IB に追加され、アウトレットの名前は「scroller」になります。

私はしばらくこれに取り組んできましたが、これを機能させることができないように見えるため、UIScrollView に関する基本的な何かが欠けているように感じます。

ポール

4

1 に答える 1