2011-08-16 4 views
0

많은 관련 질문이 있지만이 내용과 완전히 일치하지는 않습니다.UIView 내부에서 UIImageView를 회전시키는 이상한 동작

내 앱에는 콘텐츠보기와 광고 배너보기가 있습니다.

사용자가 장치를 회전 할 때마다

,

- (void) layoutSubviews 

은 콘텐츠 뷰에 ​​불려갑니다.

내 콘텐츠보기는 하나의 이미지로 구성됩니다. 이 이미지를 장치와 함께 회전 시키길 원합니다 (텍스쳐가있는 배경이므로 물리적 장치가 세로인지 가로인지에 따라 90 ° 또는 0 °로 회전하고 싶습니다.)

다음 코드는 다음과 같습니다.

// 
// 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 

지금은. 만 그것을 회전보다는 이미지를 부수되어 작동 layoutSubviews 무시하지 않고.

하지만 두 번째 기능에 넣을 때 엉망이 간다. 여기

는 출력 대표로부터의 로그 시뮬레이터에 남아있는 장치를 정중하게 회전시킵니다.

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);