【问题标题】:creating a bar with core animation创建一个带有核心动画的栏
【发布时间】:2011-09-02 09:34:12
【问题描述】:

所以我正在尝试使用苹果核心动画创建一个动画条形图。该条基本上是一个矩形图形,其值为 0-100%。当它第一次出现时,我希望它显示一个从 0 到 x % 的动画。这样的长方形怎么画?

更新: 很可能我会有一个条形图作为图像,所以我需要将此图像动画到某个高度...

【问题讨论】:

    标签: iphone objective-c ipad core-animation


    【解决方案1】:

    如果您的要求真的那么简单,您可以创建一个视图,设置其背景颜色并根据需要调整(或动画)其 frame.width(或高度)。

    当然还有更精细的方法可以做到这一点,但不需要为一个简单的问题过度设计。

    【讨论】:

    • 问题是我有酒吧的图像......所以它不仅仅是一个视图
    • UIImageView(它是 UIView 的后代)可以像 picciano 所说的那样进行动画处理。
    • 所以在这种情况下,我需要多张图片,还是只需要一张初始图片和一张最终图片,然后我就可以使用这两张图片制作动画?
    • 您只使用一张图像,它会被缩放和拉伸,具体取决于您的 UIImageView 的contentMode。如果您要智能拉伸图像,您还应该查看 UIImage 的stretchableImageWithLeftCapWidth:topCapHeight:,例如这样当整个图像发生变化时,带有斜角的源图像就不会改变斜角的大小。
    【解决方案2】:

    这应该完全符合您的要求:

    - (UIImageView*)createNewBarWithValue:(float)percent atLocation:(CGPoint)location
    {
        UIImageView *newBar = [[[UIImageView alloc] initWithFrame:CGRectMake(location.x, location.y, 50, 200)] autorelease];
        newBar.image = [UIImage imageNamed:@"bar.png"];
    
        CABasicAnimation *scaleToValue = [CABasicAnimation animationWithKeyPath:@"transform.scale.y"];
        scaleToValue.toValue = [NSNumber numberWithFloat:percent];
        scaleToValue.fromValue = [NSNumber numberWithFloat:0];
        scaleToValue.duration = 1.0f;
        scaleToValue.delegate = self;
    
        newBar.layer.anchorPoint = CGPointMake(0.5, 1);
    
        [newBar.layer addAnimation:scaleToValue forKey:@"scaleUp"];
        CGAffineTransform scaleTo = CGAffineTransformMakeScale( 1.0f, percent );
        newBar.transform = scaleTo;
    
        return newBar;
    }
    

    【讨论】:

    • 这确实起到了作用,但是如果我想在它完成到顶部时添加一个有弹性的效果怎么办?
    • 您好,您能帮我们了解一下您是如何调用此方法的吗?这是在视图还是 ViewController 中。而百分比(0-100/0-1)和点数分别对应VC或观点。谢谢
    • 已经有一段时间了,但我相信这个sn-p中的一切都是相对于视图控制器的。从视图控制器等调用,然后添加到视图控制器的视图中。
    • 谢谢,但是 UIImageView *img = [self createNewBarWithValue:2 atLocation:CGPointMake(160, 230)]; [self.view addSubview:img];尝试这个,但它总是从不同的位置绘制。
    • 嗯。如果它在意外位置绘制,我建议尝试使用上述函数中的锚点值。 (newBar.layer.anchorPoint)。话虽如此,cmets 部分并不是真正提供个人帮助的地方。如果您需要更多,请PM我。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多