【问题标题】:UIImageView doesn't position properly on iPad (always on 0, 0)UIImageView 在 iPad 上的位置不正确(总是在 0、0 上)
【发布时间】:2012-02-17 14:40:11
【问题描述】:

今天我遇到了一个奇怪的问题。我有一个适用于 iPhone 和 iPad 的应用程序,它是一个通用应用程序,但是我制作了两个主视图控制器,一个用于 iPhone,一个用于 iPad。我先做了 iPhone 版本...然后我将一些代码复制到 iPad 版本。除了我的徽标 UIImageView 之外,一切似乎都运行良好。我有一个标志,它从屏幕外滑到导航栏的中心。在动画之前,我将 UIImageView 设置为关闭屏幕,因此它可以向下滑动。但是,即使我在 uiimageview 框架的 x 和 y 中放入任何随机值,它仍然是 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 定位在中心并离开屏幕 100 像素。但什么也没有发生。它仍然是 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];
}

【问题讨论】:

  • 这不是解决方案,但-initWithFrame:UIView 和子类的指定初始化程序,而不是init
  • 谢谢,我已经试过了。也不起作用:/
  • 好吧,我说这不是一个解决方案,但我相信这是一个很好的做法。

标签: objective-c ios xcode ipad uiimageview


【解决方案1】:

我会将徽标视图设置为我的视图控制器的标题视图。在你的 -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 ;

祝你好运

【讨论】:

  • 嘿,谢谢你,但它给了我一个错误,说“valueWithCATransform3D”没有已知的类方法......:/实际上我想在屏幕外启动徽标并然后将其滑到导航栏上:)
  • 我认为我给你的代码会在屏幕外显示动画......试试看它是否有效
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 2023-02-16
相关资源
最近更新 更多