【问题标题】:Iphone Custom UITabBarItem without rounded edges没有圆边的 Iphone 自定义 UITabBarItem
【发布时间】:2011-02-18 04:58:43
【问题描述】:

我尝试自定义一个 uitabbar

我扩展了 uitabbar 项目,现在有一个自定义图像,但我无法摆脱圆角。

代码:

@interface CustomTabBarItem : UITabBarItem  
{
    UIImage *customHighlightedImage;
}

@property (nonatomic, retain) UIImage *customHighlightedImage;

@end

@implementation CustomTabBarItem

@synthesize customHighlightedImage;

- (void) dealloc
{
    [customHighlightedImage release]; customHighlightedImage=nil;
    [super dealloc];
}

-(UIImage *) selectedImage
{
    return self.customHighlightedImage;
}

@end

也许 somoen 知道如何摆脱圆角矩形

图片周围

提前致谢 亚历克斯

【问题讨论】:

    标签: iphone objective-c rounded-corners


    【解决方案1】:

    将圆角视图上的cornerRadius设置为0:

    view.layer.cornerRadius = 0;
    

    另外,您可能需要添加 #include 来获取 CALayer 声明:

    #import <QuartzCore/QuartzCore.h>
    

    【讨论】:

      【解决方案2】:

      感谢使用自定义标签栏项目解决了这个问题

      苹果尚未批准。

      进入 tabController1.m

          - (id) init
      {   
          if(self = [super init])
          {
              CustomTabBarItem *tabItem = [[CustomTabBarItem alloc]
                                           initWithTitle:@"" image:nil tag:0];
      
              tabItem.customHighlightedImage=[UIImage imageNamed:TABBAR_TAB_4_ACTIVE];
              tabItem.customStdImage=[UIImage imageNamed:TABBAR_TAB_4_DEFAULT];       
      
              self.tabBarItem=tabItem;
              [tabItem release]; 
              tabItem=nil;    
          }
          return self;
      }
      

      自定义标签项:

      @interface CustomTabBarItem : UITabBarItem  
      {
          UIImage *customHighlightedImage;
          UIImage *customStdImage;
      }
      
      @property (nonatomic, retain) UIImage *customHighlightedImage;
      @property (nonatomic, retain) UIImage *customStdImage;
      
      @end
      
      #import "CustomTabBarItem.h"
      
      
      @implementation CustomTabBarItem
      
      @synthesize customHighlightedImage;
      @synthesize customStdImage;
      
      - (void) dealloc
      {
          [customHighlightedImage release]; customHighlightedImage=nil;
          [customStdImage release]; customStdImage=nil;   
          [super dealloc];
      }
      
      -(UIImage *) selectedImage
      {
          return self.customHighlightedImage;
      }
      
      -(UIImage *) unselectedImage
      {
          return self.customStdImage;
      }
      
      @end
      

      【讨论】:

      • 是的,它被批准了。搜索“cinemaxx”
      • Alex,你是如何让红色/紫色背景在激活时占据按钮的整个空间的?
      • 我的图标后面的突出显示区域仍然存在,无法让整个区域使用背景。
      • 抱歉耽搁了。我把它作为答案发布在底部
      • 谢谢...我有一个 CustomUITabBarController 和 CustomUITabBarItem,我已经对其进行了子类化并尝试开始工作...唯一需要修复的是突出显示仍然出现...我'我会尝试使用下面的一些解决方案,如果我得到它的工作将把它放在 Github 上。
      【解决方案3】:

      这很脏 - 但有效并获得了批准:

      • 调整标签栏的大小
      • 使用适合自己大小的图片

      在标签控制器设置中

          tabController   = [[UITabBarController alloc] init];
      tabController.view.frame = CGRectMake(0, 72, 320, 480 - (82));
      tabController.delegate = self;
      UIImageView *bgImageView;
      bgImageView = [ [ UIImageView alloc ] initWithImage: [UIImage imageNamed:TABBAR_BACKGROUND]];
      bgImageView.frame = CGRectMake(0, -11, 320, 60);
      
      [[tabController tabBar] addSubview:bgImageView];
      [[tabController tabBar] sendSubviewToBack:bgImageView];
      tabController.tabBar.frame = CGRectMake(0, 460 - (59 + 52 - 11), 320, 49);
      [bgImageView release];
      
      [window addSubview:tabController.view];
      

      在 tabviewcontroller1 初始化方法中

         - (id) init
      {
          if(self = [super init])
          {       
              CustomTabBarItem *tabItem = [[CustomTabBarItem alloc]
                                           initWithTitle:@"" image:nil tag:0];
      
              tabItem.customHighlightedImage=[UIImage imageNamed:TABBAR_TAB_1_ACTIVE];
              tabItem.customStdImage=[UIImage imageNamed:TABBAR_TAB_1_DEFAULT];       
      
              self.tabBarItem=tabItem;
              [tabItem release]; 
              tabItem=nil;
          }
      
      return self;
      }
      

      以及它看起来像的自定义标签栏

          @interface CustomTabBarItem : UITabBarItem  
          {
              UIImage *customHighlightedImage;
              UIImage *customStdImage;
          }
      
          @property (nonatomic, retain) UIImage *customHighlightedImage;
          @property (nonatomic, retain) UIImage *customStdImage;
      
          @end
      
      #import "CustomTabBarItem.h"
      
      
      @implementation CustomTabBarItem
      
      @synthesize customHighlightedImage;
      @synthesize customStdImage;
      
      - (void) dealloc
      {
          [customHighlightedImage release]; customHighlightedImage=nil;
          [customStdImage release]; customStdImage=nil;   
          [super dealloc];
      }
      
      -(UIImage *) selectedImage
      {
          return self.customHighlightedImage;
      }
      
      -(UIImage *) unselectedImage
      {
          return self.customStdImage;
      }
      
      @end
      

      重要提示:

      我对 iphone 开发还很陌生,而且你可以通过这种方式来减少 hacky。此外,我得到了批准,这并不意味着你也会自动获得批准。

      【讨论】:

        【解决方案4】:

        我在上面的实现中有一个查询。

        根据苹果,我们不应该使用私有/未记录的 API,

        在上面的代码中,两个方法

        -(UIImage *) selectedImage {
            return self.customHighlightedImage; }
        
        -(UIImage *) unselectedImage {
            return self.customStdImage; }
        

        这些方法未在自定义子类 CustomTabBarItem 中定义。

        这些方法是 UITabBarItem 类中未记录/隐藏的方法,并在 CustomTabBarItem 类中被覆盖。

        是否可以覆盖未记录的方法?

        我仍然很惊讶它是如何获得 Apple 批准的。 我需要在这里澄清一下。

        【讨论】:

          【解决方案5】:

          Apple 使用此代码验证的任何其他应用程序?很想知道我们是否有权使用 selectedImage 和 unselectedImage 方法?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-20
            • 1970-01-01
            • 2010-11-10
            相关资源
            最近更新 更多