4

我希望这是我的 Ipad 应用程序的背景。我正在目标 C 中构建所有内容(本机应用程序)

我需要一点帮助来弄清楚如何为图像上的每个三角形(叠加层)设置动画,使其相互独立地淡入和淡出,目标是制作一个恒定的微光效果,这样图像就不会感觉那么僵硬。我必须独立地为每个三角形设置动画吗?有没有我应该看的算法,所以它看起来有点随机,但不是。

这是背景图片

在此处输入图像描述

我需要一些关于从哪里开始以及如何解决这个问题的指导,我们将不胜感激。

4

2 回答 2

4

a) 我的建议是使用 iOS 4 中引入的 UIViewAnimationWithBlocks。如果您对块有扎实的了解,它们会非常有用。这是我在短短 5 分钟内创建的示例来说明:

typedef void(^FadeInOutBlock)(void);

@interface PMViewController ()
@property (nonatomic, copy) FadeInOutBlock fadeInOutBlock;
@end

在这里,我们声明了一个 typedef 来避免我们再次使用块语法。我们还创建了一个属性来保存动画块。

@implementation PMViewController
@synthesize myView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    __block PMViewController *_self = self;


    self.fadeInOutBlock = ^{

        [UIView animateWithDuration:0.5f animations:^{
            // fade out effect
            _self.myView.alpha = 0.0f;
        } completion:^(BOOL success){
            [UIView animateWithDuration:0.5f animations:^{
                // fade in effect
                _self.myView.alpha = 1.0f;
            } completion:^(BOOL success){
                // recursively fire a new animation
                if (_self.fadeInOutBlock)
                    _self.fadeInOutBlock();
            }];
        }];
    };
}

我们在动画中创建动画。您从淡出开始,myView 的 alpha 将在 0.5f 秒内降低到 0.0f。完成后,将触发第二个动画,将 myView 的 alpha 恢复到 1.0f,最后再次触发第一个动画。(动画)

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if (self.fadeInOutBlock)
        self.fadeInOutBlock();
}

@end

最后,in view 确实出现了,您第一次将其关闭。

b)

现在,对于您提到的闪烁动画,我建议您将每个三角形分成它自己的 UIView 并使用上面的技术,使用不同的持续时间和 alpha。

如果您有许多小的 UIView,请将它们组合成一个更大的 UIView(通过使用 addSubview 方法)并将动画应用于那些“容器”UIView。

例如,您可以有四个独立的 UIView 容器,它们有一堆独立的 UIView 作为它们的子级。然后,您可以创建四个块动画,每个容器一个,然后将动画应用到它们。我敢打赌,你将能够创造出非常好的效果。

于 2012-09-06T02:40:28.647 回答
0

您可以在没有任何特殊库的情况下执行此操作。所以你需要创建一个UIViewalpha 为 0 的黑色。然后创建一个NSTimer增加 alpha 的UIView.

于 2012-09-06T02:12:43.030 回答