clipsToBounds=YES与shadow如何共存
有时候我们需要用view.clipsToBounds=YES
来裁剪图片防止图片显示的范围超出了UIImageView
的大小,如果这个时候还需要给这个UIImageView
加shadow
的话,可能会遇到一些问题。
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
imageView.image = [UIImage imageNamed:@"1.jpg"];
imageView.contentMode=UIViewContentModeScaleAspectFill;
imageView.layer.shadowColor = [UIColor blackColor].CGColor;
imageView.layer.shadowOffset = CGSizeMake(10, 10);
imageView.layer.shadowRadius = 10;
imageView.layer.shadowOpacity = 1.0;
imageView.clipsToBounds = YES;
[self.view addSubview:imageView];
这个时候显示的就是
UIImageView
并没有出现shadow
,这是因为当我们设置clipsToBounds
为YES
时,这个视图和其子视图的内容超出其bounds
的部分都会被裁剪掉。而shadow
是在视图的bounds
之外的。因此这样设置是看不到shadow
的。
换一种方式
UIView *shadowView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
shadowView.layer.shadowColor = [UIColor blackColor].CGColor;
shadowView.layer.shadowOffset = CGSizeMake(5, 5);
shadowView.layer.shadowRadius = 5;
shadowView.layer.shadowOpacity = 1.0;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
imageView.image = [UIImage imageNamed:@"1.jpg"];
imageView.contentMode=UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = YES;
[shadowView addSubview:imageView];
[self.view addSubview:shadowView];
我们创建一个专门用来产生shadow
的视图,将UIImageView
加到这个视图上,由于imageView
是shadowView
的子视图,在imageView
上设置clipsToBounds
为YES
并不会影响到shadowView
。
这种办法并不优雅,然而并不知道还有什么解决的办法。