5

我试图在 UIImageView 中向下滑动图像,但我不知道 UIContentMode 和动画属性的哪个组合是实现这一目标的正确组合。图像应该始终具有相同的大小,并且不应该被拉伸......我想要的是,首先没有任何东西是可见的,然后框架会延伸并显示图像。

如果您明白我的意思,也许会更容易:

我的问题的插图

所以,这听起来很简单,但是我应该为 UIImageView 使用什么 UIContentMode 以及我应该为什么属性设置动画?谢谢!

4

2 回答 2

8

我带头做了一个截屏视频。这是你的想法吗?

我将动画无限期地重复,以便用视频捕捉更容易,但它可以在按下按钮时启动,也可以在原地冻结,显示弹出框及其内容,直到反转再次隐藏。

我为此使用了 Core Animation,而不是为 UIView 设置动画,因为我想使用 CALayer 的 mask 属性来隐藏弹出框并通过滑动动画显示它。

这是我使用的代码(与视频中相同):

- (void)viewDidLoad
{

    // Declaring the popover layer
    CALayer *popover = [CALayer layer];

    CGFloat popoverHeight = 64.0f;
    CGFloat popoverWidth = 200.0f;

    popover.frame = CGRectMake(50.0f, 100.0f, popoverWidth, popoverHeight);
    popover.contents = (id) [UIImage imageNamed:@"popover.png"].CGImage;

    // Declaring the mask layer
    CALayer *maskLayer = [CALayer layer];
    maskLayer.frame = CGRectMake(0, - popoverHeight, popoverWidth, popoverHeight);
    maskLayer.backgroundColor = [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f].CGColor;

    // Setting the animation (animates the mask layer)
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
    animation.byValue = [NSNumber numberWithFloat:popoverHeight];
    animation.repeatCount = HUGE_VALF;
    animation.duration = 2.0f;

    [maskLayer addAnimation:animation forKey:@"position.y"];

    //Assigning the animated maskLayer to the mask property of your popover
    popover.mask = maskLayer;

    [self.view.layer addSublayer:popover];

    [super viewDidLoad];
}

注意:您必须将 QuartzCore 框架导入您的项目并在头文件中写入这一行:#import <QuartzCore/QuartzCore.h>.

告诉您这是否适合您,或者您是否需要更多帮助来设置它。

于 2011-07-28T17:27:02.773 回答
2

试试这个代码。将 UIImageView 视为 imageView。

imageView.contentMode = UIViewContentModeScaleAspectFill;
CGRect imageRect = imageView.frame;
CGRect origImgRect = imageRect;
imageRect.size.height = 5;
imageView.frame = imageRect;

[UIView animateWithDuration:2.0
     animations:^{imageView.rect = origImgRect;}
     completion:^(BOOL finished){  }];
于 2011-07-27T12:38:19.370 回答