0

scrollviewiOS 6 のデフォルトのように、何らかの方法で all を回転させるのではなく、要素を何度も再描画するのは良いことですかview。また、私のアプリは iOS > 4.3 をサポートしています。これに要素を回転させscrollviewて描画するメソッドがあります。

   - (void)viewDidLoad {
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification"  object:nil];
    UIDeviceOrientation newOrientation = [[UIDevice currentDevice] orientation];
    [self didRotate:newOrientation];
    [super viewDidLoad];
}

-(void)didRotate:(UIDeviceOrientation)orientation {
    UIDeviceOrientation newOrientation = [[UIDevice currentDevice] orientation];

CGRect frame = CGRectMake([UIScreen mainScreen].bounds.origin.x, [UIScreen mainScreen].bounds.origin.y, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width);
CGSize maximumSize;

if (UIInterfaceOrientationIsLandscape(newOrientation)) {
    maximumSize = CGSizeMake(frame.size.width, frame.size.height);
} else {
    maximumSize = CGSizeMake(frame.size.height, frame.size.width);
}

//self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.scrollView removeFromSuperview];
    [name removeFromSuperview];
    [text removeFromSuperview];
     self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, maximumSize.width, maximumSize.height)];

self.scrollView.backgroundColor = [UIColor greenColor];
name = [self configureLabel:name WithCoordsOfX:100.0f y:10.0f Width:self.scrollView.bounds.size.width Height:10.0f forKey:@"title"];
text = [self configureLabel:text WithCoordsOfX:10.0f y:110.0f Width:self.scrollView.bounds.size.width-20 Height:self.scrollView.bounds.size.height forKey:@"text"];
self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width, text.frame.size.height+220);
text.backgroundColor = [UIColor grayColor];


// add myLabel
[self.scrollView addSubview:photo];
[self.scrollView addSubview:name];
[self.scrollView addSubview:text];
[self.view addSubview:self.scrollView];
NSLog(@"%f %f",self.scrollView.bounds.size.height,self.scrollView.bounds.size.width);
}

- (UILabel *)configureLabel:(UILabel *)label WithCoordsOfX:(float)x y:(float)y Width:(float)width Height:(float)height forKey:(NSString *)key
{
    label = [[UILabel alloc]initWithFrame:CGRectMake(x, y, width, height)];
    label.text = [personData valueForKey:key];
    [label setNumberOfLines:0];
    [label setFont:[UIFont fontWithName:@"Georgia" size:14.0]];
    [label setBackgroundColor:[UIColor clearColor]];
    [label setTextColor:[UIColor blackColor]];
    [label sizeToFit];

    return label;
}

このコード行を使用しようとしましたが、役に立ちません。

self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

また、他のビューは直後にクールに回転します

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;  
} 

UIScrollViewの向きを変更する「良い」方法があるかどうか、または要素を再描画することが最良の選択であるかどうか教えてください。そして、その例は非常に良いでしょう。

4

1 に答える 1

1

いいえ、あなたが従う方法はパフォーマンスの問題を引き起こします。あなたはサブビューではありませredrawingrecreating。サブビュー階層全体を異なるサイズにするためだけに再作成するのは、適切なプログラミングではありません。

理想的には、デバイスの回転時に、向きに応じてスクロールビューとサブビューのフレームのみを変更します。これに対処する 1 つの方法は、サブクラスであり、サブビューを再レイアウト (フレームのみを変更し、再作成しない) できるUIScrollViewオーバーライドメソッドです。それ以外の場合は、メソッドでサブビューをlayoutSubview列挙し、特定の方向に従ってそれらを再フレーム化できます。UIScrollViewdidRotate:

于 2013-06-14T11:55:02.897 に答える