带有 UILabel 的 UIView transitionWithView 在过渡期间会丢失圆角

Posted

技术标签:

【中文标题】带有 UILabel 的 UIView transitionWithView 在过渡期间会丢失圆角【英文标题】:UIView transitionWithView with UILabel loses rounded corners during transition 【发布时间】:2014-01-29 11:40:01 【问题描述】:

我目前有一个UIView,上面有UILabels。

这些UILabels 有圆角。

我按下了一个按钮,然后使用UIView transitionWithView 方法以编程方式删除所有这些标签。

但是,在过渡期间,圆角会丢失。

是否可以在过渡期间保持这些圆角? 即在过渡之前、期间和之后,拐角应保持圆角。

下面是一些示例代码:

@interface ExampleViewController

@property (strong, nonatomic) UIView *view;
@property (strong, nonatomic) UILabel *myLabel;

@end

@implementation ExampleViewController

- (void) viewDidLOad

   self.myLabel = [[UILabel alloc] initWithFrame:self.view.frame];      
   [self.myLabel setText:@"Example Label"];
   [self.myLabel setCenter:CGPointMake(100,100)];     // position the label somewhere on the screen
   [self.myLabel.layer setCornerRadius:5];       // set the corner radius
   [self.myLabel.layer setMasksToBounds:YES];   // found this particular line on another *** thread (http://***.com/questions/11604215/uiview-transitionwithview-discarding-layer-settings)
   [self.myLabel setHidden:NO];
   [self.myLabel setBackgroundColor:[UIColor orangeColor]];
   [self.myLabel setNumberOfLines:0];

   [self.myLabel sizeToFit];
   [self.view addSubview:self.myLabel];


// user interaction
- (IBAction)labelOff:(id)sender 

   BOOL hidden = [self.myLabel isHidden];
   [UIView transitionWithView:self.myLabel 
                     duration:1
                      options:UIViewAnimationOptionTransitionCrossDissolve
                   animations:NULL
                   completion:NULL];

   [self.myLabel setHidden:!hidden];


@end

我正在使用 XCode 5iOS 7。非常感谢任何帮助。

【问题讨论】:

你是什么意思在过渡期间保持这些圆角? 抱歉 - 忘记添加背景颜色和尺寸调整。已编辑。因此,当标签首次显示时,标签具有圆角。当我将标签转换为隐藏它时,角落变成“不圆”,就像它一样。 我的问题是:您想要过渡后的圆角还是只想要过渡时..? 嗯,好的——我想要在过渡之前、期间和之后的圆角(尽管之后标签无论如何都会被隐藏——但我想把标签带回来)。当我从隐藏过渡到非隐藏时,标签实际上确实保留了它们的圆角。这只是从非隐藏到隐藏的过渡,圆角似乎消失了。 这里是使用transitionWithView:***.com/questions/11604215/…的实际答案。只需将视图层的masksToBounds 属性设置为true 【参考方案1】:

我不确定在过渡期间角半径是如何被移除的。但是,您可以使用另一种方法,它具有相同的最终结果。

- (IBAction)labelOff:(id)sender

    [UIView animateWithDuration:1.0f
                     animations:^
                         self.myLabel.alpha = !self.myLabel.alpha;
                     ];

【讨论】:

【参考方案2】:

我希望,您需要清空 UILabel.text 但属性应该可用。对吗,那么

BOOL hidden; // Declare under @interface

- (IBAction)labelOff:(id)sender 

   if(hidden)
      hidden =false;
      [self.myLabel setText:@""];
   
   else
      hidden =true;
     [self.myLabel setText:@"Example Label"];
   
   [UIView transitionWithView:self.myLabel 
                     duration:1
                      options:UIViewAnimationOptionTransitionCrossDissolve
                   animations:NULL
                   completion:NULL];



【讨论】:

试过这个,但不幸的是得到了同样的结果。

以上是关于带有 UILabel 的 UIView transitionWithView 在过渡期间会丢失圆角的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义uiview的UItableview headerview?

基于多行 UILabel 自动调整 UIView 的大小

iOS - 创建自定义 UILabel 并将它们添加到 UIView

如何告诉带有 UITextField 的自定义 UIView 接收触摸事件

我应该使用 UIView 和 UILabel 在 SKView 上显示游戏详细信息吗

在情节提要中定位 UILabel