0

我将 UIImageView 从对象库中放入我的场景中,并给它一个图像并在 .h 文件中定义了 OUTLET。现在我想检查它的坐标,或中心点,或框架 X,Y,宽度,高度。我正在使用这个

CGRect newFrameSize = CGRectMake(recycleBin.frame.origin.x, recycleBin.frame.origin.y,
recycleBin.frame.size.width, recycleBin.frame.size.height);

或者

CGRect newFrameSize = recycleBin.frame;

通过使用这个

NSLog(@"%@", NSStringFromCGRect(newFrameSize));

给出相同的结果

2013-01-16 21:42:25.101 xyzapp[6474:c07] {{0, 0}, {0, 0}}

我想要它在加载视图控制器时的实际位置和大小,所以当用户点击图像视图时,它会通过向用户放大而淡出并消失,当用户点击重置按钮时,它会淡入并放大回原始形式(反转到上一个动画)。还给我提示,如何在 UIImageView 或任何按钮或标签上执行此动画。谢谢

4

2 回答 2

1

不幸的是,您无法检查项目在 IB 中设置的实际框架-viewDidLoad。最早可以检查它(我发现)是通过覆盖-viewDidAppear:. 但是,由于-viewDidAppear:可以在视图的整个生命周期中多次调用,因此您需要确保没有保存处于修改状态的帧。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    if(savedFrame == CGRectZero) {
        savedFrame = self.recycleBin.frame;
        NSLog(@"Frame: %@", NSStringFromCGRect(savedFrame));
    }
}

savedFrame成员变量在哪里(或者您可以将其设为属性)。

从您想要的动画的描述中,听起来调整框架并不是解决问题的方法。听起来您想要获得视图拉伸和淡出的效果(重置时相反)?如果是这样,像这样的一些代码可能更适合你正在寻找的东西......

消退:

float animationDuration = 2.0f; // Duration of animation in seconds
float zoomScale = 3.0f; // How much to zoom in duration the animation
[UIView animateWithDuration:animationDuration animations:^{
    CGAffineTransform transform = CGAffineTransformMakeScale(zoomScale, zoomScale);
    self.recycleBin.transform = transform;
    self.recycleBin.alpha = 0; // Make fully transparent
}];

然后,重置视图:

float animationDuration = 2.0f; // Duration of animation in seconds
[UIView animateWithDuration:animationDuration animations:^{
    CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 1.0f);
    self.recycleBin.transform = transform;
    self.recycleBin.alpha = 1.0; // Make fully opaque
}];

你可以玩弄这些数字,看看你是否得到了你想要的效果。iOS 中的大多数动画实际上都非常简单。此代码适用于任何 UIView 子类。

于 2013-01-16T18:14:43.090 回答
0

听起来好像您的 IBOutlet 没有附加到您的班级。

打开您的视图控制器头文件(如果这是您的属性声明所在的位置)并查看声明旁边:

在此处输入图像描述

请注意在第一个 IBOutlet 上,圆圈(行号左侧)是如何填充的。这意味着它已连接到您的场景。但是,第二个不是(圆圈没有填充)。

于 2013-01-16T18:01:46.823 回答