1

我正在尝试做一个简单的 2 帧动画UIButton。我知道使用该UIButton's imageView.animationImages属性可以做到这一点-将其设置为数组并为其设置动画。但是当我这样做时,什么都没有出现。仅供参考,我已经检查了 buttonImages 数组,它确实包含我想要显示的图像。有什么想法我哪里出错了吗?

NSArray *buttonImages = bookDoc.book.buttonImages;
UIImage *bookImage = bookDoc.thumbImage;
UIButton *bookButton = [UIButton buttonWithType:UIButtonTypeCustom];
bookButton.frame = CGRectMake(0, 0, bookImage.size.width, bookImage.size.height);
//[bookButton setBackgroundImage:bookImage forState:UIControlStateNormal];
bookButton.imageView.animationImages = buttonImages;
bookButton.imageView.animationDuration = 0.5;
bookButton.imageView.animationRepeatCount = INFINITY;
[bookButton addTarget:self action:@selector(bookButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[bookButton.imageView startAnimating];
4

3 回答 3

3

的用 (0,0,0,0)imageViewUIButton帧初始化,即它是不可见的(实际上它也被隐藏了)。

您可以自己配置framehidden属性:

bookButton.imageView.frame = CGRectMake(0, 0, 20, 20);
bookButton.imageView.hidden = NO;

或者,更简单的是使用动画的第一张图片

[bookButton setImage:buttonImages[0] forState:UIControlStateNormal];

这将取消隐藏 imageView 并设置其正确的框架。

一旦 imageView 可见,它就会动画。

于 2013-01-09T12:10:16.640 回答
1

我认为我从未尝试将图像保存到按钮的 imageView 属性。我一直使用 setImage:forState 或 setBackgroundImage:forState。

我的猜测是按钮正在设置它的图像视图本身的图像属性,使用(nil)图像作为默认图像状态。

您是否尝试将 button.imageView.image 属性设置为静态图像以查看是否有效?正如我所说,我的猜测是该按钮将覆盖您使用 setImage:forState 中提供的设置提供的任何图像(或 nil,如果您从未为当前状态提供图像。)

于 2012-05-17T19:21:46.390 回答
0

我刚刚写了这个,它有效。它的缺点是我在 IB 中设置的突出显示的图像似乎不起作用。Xcode 5. 也许禁用的图像等也不起作用。如果你不在乎,这行得通。

+(void)animatemjad:(UIButton*)button offimagenames:(NSArray*)imagenames startdelay:(const NSTimeInterval)STARTDELAY {
    UIImageView* imageview = [button imageView];
    NSMutableArray* images = [NSMutableArray array];
    for (NSString* imagename in imagenames) {
        UIImage* image = [UIImage imageNamed:imagename];
        NSAssert(image != nil, @"Failed loading imagename: %@", imagename);
        if (image == nil)
            return; // return out here... whatever
        [images addObject:image];
    }
    imageview = [[UIImageView alloc] initWithImage:images.firstObject];
    [button addSubview:imageview];
    imageview.animationImages = images;
    imageview.animationDuration = 5;
    imageview.animationRepeatCount = 0;
    [imageview performSelector:@selector(startAnimating) withObject:nil afterDelay:STARTDELAY]; // [imageview startAnimating];
}
于 2014-07-18T02:23:13.390 回答