gpt4 book ai didi

iphone - UINavigationBar 背景图像通过drawRect - 提示动画问题

转载 作者:行者123 更新时间:2023-12-03 20:17:11 25 4
gpt4 key购买 nike

我通过类别覆盖drawRect,将自定义背景图像添加到我的UINavigationBar。

- ( void )drawRect:( CGRect )rect{    [[UIImage imageNamed:@"navbar.png"] drawInRect:CGRectMake( 0, self.frame.size.height-44, self.frame.size.width, 44 )];}

此解决方案似乎工作正常,直到您尝试使用 navigationitem.prompt 属性。它没有制作流畅的提示动画,而是突然进行。

对于如何解决这个问题有什么建议吗?或者设置背景图像的替代方法。

PS。我试图避免只添加背景图像作为 subview ,因为 View 推送/弹出时事物会重新排列。我不想在每个 View 的 viewDidAppear 中发送 SubviewToBack 。

TIA!

编辑:我还尝试了方法调配,如果我可以让我的图像拉伸(stretch),那么它会很好地工作,但由于图像不可拉伸(stretch),我需要弄清楚如何利用恰好进行转换的动画而不是拉伸(stretch)。

编辑:请参阅下面我的黑客答案

最佳答案

非常“hacky”,但这是我能让它做我想做的事情的最接近的......

基本上,当方法混合时,简单地让图像拉伸(stretch)对我来说效果不佳,因为我也有圆角。因此,我将角制作为单独的透明 img 并将其添加为 subview ,这样它们就不会受到拉伸(stretch)动画的影响。

所以我的类别现在看起来像这样..

#import "UINavigationBar+custom.h"#define cornersTag 1@implementation UINavigationBar (UINavigationBarCategory)-(void)setCornersIfNeeded{ UIImageView *corners = (UIImageView*)[self viewWithTag:cornersTag]; if(!corners){  UIImage *img = [[UIImage imageNamed:@"navbar_corners.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0];  corners = [[[UIImageView alloc] initWithImage:img] autorelease];  corners.frame = CGRectMake(0, 0, self.frame.size.width, img.size.height);  corners.tag = cornersTag;  [self addSubview:corners]; }}- (void)customDrawRect:( CGRect )rect{ [self customDrawRect:rect]; [[UIImage imageNamed:@"navbar.png"] drawInRect:rect];  [self setCornersIfNeeded];}@end

有关方法调配的更多信息... http://www.cocoadev.com/index.pl?MethodSwizzlingMethod Swizzle on iPhone device

关于iphone - UINavigationBar 背景图像通过drawRect - 提示动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1619867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com