【问题标题】:UIButton's imageView property and hidden/alpha valueUIButton 的 imageView 属性和 hidden/alpha 值
【发布时间】:2012-07-25 06:52:31
【问题描述】:

我有一个 UIButton 在某些情况下应该显示一个活动指示器而不是图像。我目前所做的是将按钮的 imageView 的隐藏属性设置为 YES 并返回。我还尝试将 alpha 值设置为 0.0f 并返回到 1.0f。

这一直有效,直到按钮的状态发生变化。这会重置 imageView 的属性并导致 hidden == NO 和 alpha == 1.0f。

有没有人做过类似的事情或知道如何隐藏按钮的 imageView 而其余部分保持可见?

【问题讨论】:

    标签: ios uikit uibutton hidden alpha


    【解决方案1】:

    您可以通过使用视图层的变换属性来实现这一点,即

    隐藏

    快速代码

    button.imageView?.layer.transform = CATransform3DMakeScale(0.0, 0.0, 0.0)
    

    objective-C 代码

    button.imageView.layer.transform = CATransform3DMakeScale(0, 0, 0);
    

    取消隐藏

    button.imageView?.layer.transform = CATransform3DIdentity
    

    objective-C 代码

    button.imageView.layer.transform = CATransform3DIdentity
    

    【讨论】:

      【解决方案2】:

      这很简单。 按钮有不同的状态。只需为选定状态设置零图像,为正常状态设置图像。当您想显示活动指示器时,将按钮状态设置为选中并将指示器添加为按钮子视图。

      - (void)initializeButton {
          button = [[UIButton alloc] init];
          [button addTarget:self action:@selector(buttonDidClick:) forControlEvents:UIControlEventTouchUpInside];
      
          [button setImage:[[UIImage alloc] init] forState:UIControlStateSelected]; //zero image
          [button setImage:yourImage forState:UIControlStateSelected]; //your image
      }
      
      - (void)buttonDidClick:(UIButton *)button {
          button.selected = YES;
          /* Add yor activity indicator with some view tag or save reference to it */
      }
      

      当你的活动完成时调用下一个方法

      - (void)finishActivityWithButton:(UIButton *)button {
          button.selected = NO;
          /* Remove your activity indicator from button */
      }
      

      【讨论】:

        【解决方案3】:

        如果您使用的是模板图像,请将色调颜色设置为 [UIColor clearColor](应该也适用于其他人,没有尝试)

        [[button imageView] setTintColor:[UIColor clearColor]];
        

        【讨论】:

          【解决方案4】:

          您可以通过在想要隐藏图像时从按钮中删除图像并在需要显示图像时将图像分配回按钮来实现此目的。

          当你想隐藏图像时,可以这样写:

          [yourButton setImage:nil forState:UIControlStateNormal];
          

          当你想要显示图像时:

          [yourButton setImage:yourImage forState:UIControlStateNormal];
          

          这里的yourButton 是您的UIButtonyourImage 是一个包含按钮图像的UIImage

          【讨论】:

            【解决方案5】:

            改变变换或选择状态会导致另一个问题,最好的方法是使用类别:

            const char kNormalImage;
            const char kSelectImage;
            const char kDisableImage;
            
            @interface UIButton ()
            
            @property (nonatomic, strong) UIImage *normalImage;
            @property (nonatomic, strong) UIImage *selectImage;
            @property (nonatomic, strong) UIImage *disableImage;
            
            @end
            
            @implementation UIButton (Hidden)
            
            - (void)setImageViewHidden:(BOOL)hidden {
                if (hidden) {
                    self.normalImage = [self imageForState:UIControlStateNormal];
                    self.selectImage = [self imageForState:UIControlStateSelected];
                    self.disableImage = [self imageForState:UIControlStateDisabled];
            
                    UIGraphicsBeginImageContextWithOptions(self.imageView.bounds.size, NO, 0.0);
                    UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
                    UIGraphicsEndImageContext();
            
                    [self setImage:blank forState:UIControlStateNormal];
                    [self setImage:blank forState:UIControlStateSelected];
                    [self setImage:blank forState:UIControlStateDisabled];
                } else {
                    [self setImage:self.normalImage forState:UIControlStateNormal];
                    [self setImage:self.selectImage forState:UIControlStateSelected];
                    [self setImage:self.disableImage forState:UIControlStateDisabled];
                }
            }
            
            - (UIImage *)normalImage {
                return objc_getAssociatedObject(self, &kNormalImage);
            }
            
            - (void)setNormalImage:(UIImage *)normalImage {
                objc_setAssociatedObject(self, &kNormalImage, normalImage,  OBJC_ASSOCIATION_RETAIN_NONATOMIC);
            }
            
            - (UIImage *)selectImage {
                return objc_getAssociatedObject(self, &kSelectImage);
            }
            
            - (void)setSelectImage:(UIImage *)selectImage {
                objc_setAssociatedObject(self, &kSelectImage, selectImage,  OBJC_ASSOCIATION_RETAIN_NONATOMIC);
            }
            
            - (UIImage *)disableImage {
                return objc_getAssociatedObject(self, &kDisableImage);
            }
            
            - (void)setDisableImage:(UIImage *)disableImage {
                objc_setAssociatedObject(self, &kDisableImage, disableImage,    OBJC_ASSOCIATION_RETAIN_NONATOMIC);
            }
            
            @end
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-05-04
              • 1970-01-01
              • 2015-09-15
              • 1970-01-01
              • 1970-01-01
              • 2014-01-21
              • 2013-03-16
              • 1970-01-01
              相关资源
              最近更新 更多