【问题标题】:Problem creating shadow behind rounded UIImageView在圆形 UIImageView 后面创建阴影的问题
【发布时间】:2023-03-17 02:29:02
【问题描述】:

我有一个圆形的 UIImageView。当我给它添加阴影时,我失去了圆角。我怎样才能有一个圆角的阴影?

//Avatar
        CGRect rect;
        rect = CGRectMake(13, 10, 48, 48);
        avatarImageView = [[TCImageView alloc] initWithURL:[NSURL URLWithString:nil] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
        avatarImageView.frame = rect;
        avatarImageView.caching = YES;

        //Round the corners
        CALayer * layer = [avatarImageView layer];
        [layer setMasksToBounds:YES];
        [layer setCornerRadius:9.0];

        //Add a shadow
        avatarImageView.layer.shadowColor = [UIColor grayColor].CGColor;
        avatarImageView.layer.shadowOffset = CGSizeMake(0, 1);
        avatarImageView.layer.shadowOpacity = 1;
        avatarImageView.layer.shadowRadius = 9.0;
        avatarImageView.clipsToBounds = NO;

        [self.contentView addSubview: avatarImageView];

【问题讨论】:

    标签: iphone objective-c uiimageview core-animation calayer


    【解决方案1】:

    使您的图像显示为圆角的功能是隐藏阴影的功能:[layer setMasksToBounds: YES]。您可以做的是将 ImageView 放在 UIView 子视图中,该子视图充当提供阴影的容器。

    所以代码可能看起来像这样(我只是输入它,但没有编译它)

    //Avatar
    CGRect rect;
    rect = CGRectMake(13, 10, 48, 48);
    avatarImageView = [[TCImageView alloc] initWithURL:[NSURL URLWithString:nil]   placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
    avatarImageView.frame = rect;
    avatarImageView.caching = YES; 
    
    //Round the corners
    CALayer * layer = [avatarImageView layer];
    [layer setMasksToBounds:YES];
    [layer setCornerRadius:9.0];
    
    //Add a shadow by wrapping the avatar into a container
    UIView * container = [[UIView alloc] initWithFrame: rect];
    avatarImageView.frame = CGRectMake(0,0,rect.size.width, rect.size.height);
    
    // setup shadow layer and corner
    container.layer.shadowColor = [UIColor grayColor].CGColor;
    container.layer.shadowOffset = CGSizeMake(0, 1);
    container.layer.shadowOpacity = 1;
    container.layer.shadowRadius = 9.0;
    container.layer.cornerRadius = 9.0;
    container.clipsToBounds = NO;
    
    // combine the views
    [container addSubview: avatarImageView];
    [self.contentView addSubview: container];
    [container release];
    

    【讨论】:

      猜你喜欢
      • 2017-05-19
      • 2014-02-19
      • 2012-12-13
      • 2011-01-03
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多