UIButton 图像从 URL 加载后淡入淡出

Posted

技术标签:

【中文标题】UIButton 图像从 URL 加载后淡入淡出【英文标题】:Fade in UIButton images after they load from URL 【发布时间】:2013-10-08 08:30:03 【问题描述】:

我正在使用 AFNetworking 方法将我的图像加载到 UIBUttons 中。我的目标是在加载后显示带有淡入淡出动画的图像。

     [leftBtn setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:leftImageUrl]] placeholderImage:nil forState:UIControlStateNormal success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) 
                 [UIView animateWithDuration:0.4 animations:^() leftBtn.alpha = 1;completion:^(BOOL finished)];
             failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) 
                //
            ];

Capturing 'leftBtn' strongly in this block is likely to lead to a retain cycle

我明白为什么我会收到上述警告,并正在寻找一种聪明的方法来解决它。 谢谢

【问题讨论】:

【参考方案1】:

你应该使用类似的东西:

__weak UIButton *weakLeftBtn = leftBtn;
[leftBtn setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL      
                                               URLWithString:leftImageUrl]] 
               placeholderImage:nil 
                       forState:UIControlStateNormal 
                        success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) 

                              [UIView animateWithDuration:0.4 animations:^() 

                                   weakLeftBtn.alpha = 1;

                              completion:^(BOOL finished)];
                failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) 
           // if something went wront
];

更新:在您的代码中,leftBtn 指向一个块,而该块又指向 leftBtn。这会导致一个保留周期。在我的代码中leftBtn 指向块,但块指向weakLeftBtn,它用__weak 限定符声明,这意味着只要它还活着而不保持牢固的关系,它就会正确指向leftBtn用它。所以在这种情况下leftBtn“拥有”该块,但该块不“拥有”任何本地或实例变量。

关于这个主题的一些值得阅读的文章:

Transitioning to ARC Release Notes Working with Blocks Practical Memory Management

【讨论】:

谢谢。所以这样做我只是告诉编译器这个 UIButton 很弱,他没有什么可担心的?另一个问题,除了上述之外,我什么时候使用__?谢谢 @Sha:我刚刚修改了答案。 很好的答案。再次感谢!

以上是关于UIButton 图像从 URL 加载后淡入淡出的主要内容,如果未能解决你的问题,请参考以下文章

动画 UIButton 状态以在点击时淡入和淡出

角度6背景图像交叉淡入淡出动画

使用 jquery 地址(ajax)淡入和淡出内容

当博客加载更多图像时,mouseover 和 mouseout 淡入淡出效果停止

UIButton 如何淡入淡出

MPMoviePlayerController 添加 UIButton 以查看淡入淡出的控件