UIImageView неправильно позиционируется на iPad (всегда на 0, 0) - PullRequest
0 голосов
/ 24 января 2012

Сегодня я столкнулся со странной проблемой.У меня есть приложение, которое одинаково для iPhone и iPad, это универсальное приложение, однако я сделал два контроллера основного вида, один для iPhone и один для iPad.Сначала я сделал версию для iPhone ... потом скопировал часть кода в версию для iPad.Кажется, все работает нормально, кроме моего логотипа UIImageView.У меня есть логотип, который скользит вниз от экрана к центру панели навигации.Перед анимацией я настроил UIImageView за пределами экрана, чтобы он мог скользить вниз.Но даже если я добавлю любое случайное значение в x и y фрейма uiimageview, оно по-прежнему равно 0, 0. Это тот же код, что и на iPhone, и он работает нормально.

Вот моя инициализация.

    UIImage *logoText = [UIImage imageNamed:@"logotext.png"];
    [logoTextView setUserInteractionEnabled:YES];
    logoTextView = [[UIImageView alloc] init];
    // I already tried [[UIImageView alloc] initWithFrame:CGRectMake......];
    logoTextView.frame = CGRectMake(389, -100, logoText.size.width, logoText.size.height);
    logoTextView.image = logoText;
    logoTextView.center = CGPointMake(389, -100);
    logoTextView.alpha = 1;
    [logoTextView addGestureRecognizer:resetGesture];
   // [logoTextView setBackgroundColor:[UIColor whiteColor]];
    [self.view insertSubview:logoTextView atIndex:10];

Это на самом деле должно позиционировать UIImageView в центре и на 100px за пределами экрана.Но ничего не происходит.Это все еще 0, 0. Я попробовал это всеми способами, которые я знаю, ничего действительно не работает ...

Кто-нибудь знает, что делать?Это действительно помогло бы мне.:)

РЕДАКТИРОВАТЬ

Я только что нашел решение ... Я не знаю почему, но это работает, только если это в новом методе ... странно.

- (void)logoShow {

    UITapGestureRecognizer *resetGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resetValues)];

    UIImage *logoText = [UIImage imageNamed:@"logotext@2x.png"];
    logoTextView = [[UIImageView alloc] initWithFrame:CGRectMake(389, -50, logoText.size.width/1.35, logoText.size.height/1.35)];
    logoTextView.center = CGPointMake(389, -50);
    logoTextView.image = logoText;
    logoTextView.alpha = 1;
    [logoTextView addGestureRecognizer:resetGesture];
    [self.view insertSubview:logoTextView atIndex:15];


    // LOGO TEXT ANIMATION
    [UIView beginAnimations:@"Logo Text Animation" context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [UIView setAnimationDelay:4.5];
    [UIView setAnimationDuration:0.5];
    logoTextView.alpha = 1;
    logoTextView.center = CGPointMake(389, 22);
    [UIView commitAnimations];
    [logoTextView setUserInteractionEnabled:YES];
}

1 Ответ

0 голосов
/ 24 января 2012

Я бы установил вид логотипа как вид заголовка моего контроллера вида. В вашем -initWithNib (или аналогичном) сделайте следующее:

logoTextView.alpha = 0.0f ;
self.navigationItem.titleView = logoTextView ;

Тогда в вашем -viewDidAppear: методе сделайте это:

CALayer * layer = logoTextView.layer ;
{
    CABasicAnimation * anim = [ CABasicAnimation animationWithKeyPath:@"transform" ] ;
    anim.fromValue = [ NSValue valueWithCATransfom3D:
                         CATransform3DMakeTranslate( 0, -100.0f, 0 ) ] ;
    [ layer addAnimation:anim forKey:nil ] ;
}
logoTextView.alpha = 1.0f ;

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...