Множество связанных вопросов, но я не вижу ни одного, который бы полностью соответствовал этому.
Мое приложение имеет вид содержимого и вид рекламного баннера.
Каждый раз, когда пользовательповорачивает устройство,
- (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}
Я бы хотел понять, что происходит. Кто-нибудь может пролить свет?