2011-08-16 15 views
0

多くの関連する質問がありますが、これはまったく一致しません。UIView内でUIImageViewを回転させる不思議な動作

私のアプリにはコンテンツビューと広告バナービューがあります。

ユーザーがデバイスを回転させるたびに、

- (void) layoutSubviews 

は、コンテンツビューに呼び出されます。

私のコンテンツビューは、1つのイメージで構成されています。この画像をデバイスと一緒に回転させたい(物理的な背景なので、物理的なデバイスが縦長か横長かに応じて90°または0°に回転させたい)

コードは次のとおりです。それだけで画像を潰しではなく、それを回転さ

それが動作 layoutSubviews上書きせずに今すぐ
// 
// ContentView.m 
// ChordWheel2 
// 
// Created by Pi on 16/08/2011. 
// Copyright 2011 Pi. All rights reserved. 
// 

#import "ContentView.h" 


#import "Helper.h" 

@implementation ContentView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 

     self.autoresizesSubviews = YES; 
     { 
      // background -- want to cache, so imageNamed is the right method 
      UIImage* backgroundImage = [UIImage imageNamed: @"background2.png"]; 

      background = [[[UIImageView alloc] initWithFrame: frame] autorelease]; 

      background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

      //background.autoresizingMask = 
      [background setImage: backgroundImage]; 

      [self addSubview: background]; 
     } 
    } 
    return self; 
} 

- (void) layoutSubviews 
{ 
    UIDeviceOrientation O = [UIDevice currentDevice].orientation; 

    BOOL is_L = UIInterfaceOrientationIsLandscape(O); 

    float theta = is_L ? M_HALF_PI : 0; 

    LOG(@"T = %@", NSStringFromCGAffineTransform(background.transform)) ; 
    LOG(@"C = %@", NSStringFromCGPoint(background.center)); 

    background.transform = CGAffineTransformMakeRotation(theta); 
} 

@end 

。。

しかし、私はそれがめちゃくちゃになる第二の機能に置く。

ここでは、出力されます代表からのログシミュレータ上に残っているデバイスを静かに回転させる。

T = [1, 0, 0, 1, 0, 0] C = {160, 240} 
T = [1, 0, 0, 1, 0, 0] C = {240, 160} 
T = [0, 1, -1, 0, 0, 0] C = {160, 240} 
T = [1, 0, -0, 1, 0, 0] C = {240, 160} 
T = [0, 1, -1, 0, 0, 0] C = {320, 80} 
T = [1, 0, -0, 1, 0, 0] C = {400, 0} 
T = [0, 1, -1, 0, 0, 0] C = {320, 80} 
T = [1, 0, -0, 1, 0, 0] C = {400, 0} 
T = [0, 1, -1, 0, 0, 0] C = {320, 80} 
T = [1, 0, -0, 1, 0, 0] C = {480, -80} 
T = [0, 1, -1, 0, 0, 0] C = {400, 0} 
T = [1, 0, -0, 1, 0, 0] C = {640, -80} 
T = [0, 1, -1, 0, 0, 0] C = {560, 0} 
T = [1, 0, -0, 1, 0, 0] C = {800, -80} 
T = [0, 1, -1, 0, 0, 0] C = {720, 0} 
T = [1, 0, -0, 1, 0, 0] C = {960, -80} 
T = [0, 1, -1, 0, 0, 0] C = {880, 0} 

変換を実行すると、正しく中心点が報告されます。

T = [1, 0, 0, 1, 0, 0] C = {160, 240} 
T = [1, 0, 0, 1, 0, 0] C = {240, 160} 
T = [1, 0, 0, 1, 0, 0] C = {160, 240} 
T = [1, 0, 0, 1, 0, 0] C = {240, 160} 
T = [1, 0, 0, 1, 0, 0] C = {160, 240} 
T = [1, 0, 0, 1, 0, 0] C = {240, 160} 

私は何が起こっているのか理解したいと思います。誰か光を当てることはできますか?

答えて

1

最後にそれを得ました。

は、まず私はその後、私は持っていた

self.autoresizesSubviews = NO; 

を設定するために必要な画像は、姿勢変更を強制的にlayoutSubviews各時刻を表示-センターを再します

background.center = self.center; 
background.transform = CGAffineTransformMakeRotation(theta); 
関連する問題