首页 > 其他分享 >iOS 父视图设置阴影 并且内部的子视图左右下边设置圆角

iOS 父视图设置阴影 并且内部的子视图左右下边设置圆角

时间:2023-10-27 10:14:29浏览次数:35  
标签:layer 轮播 self iOS 视图 阴影 点击 设置

给视图设置阴影的时候无法使用masksToBounds=YES,否则阴影也会被截取掉,将无法看到阴影效果

如上图中所示,弹窗中每个item是一个类似card的效果,内部包含选择框和下面的轮播图,给item设置阴影后发现下边的轮播图超出部分还是直角效果,这样很不好看,所有这里通过单独给轮播图设置mark来实现底部左右两边圆角效果,具体代码如下:

-(void)layoutSubviews{
    [super layoutSubviews];
    self.layer.masksToBounds = NO;
    self.backgroundColor     = [UIColor whiteColor];
    self.layer.shadowColor   = [UIColor blackColor].CGColor;
    self.layer.shadowOffset  = CGSizeMake(0,4);   //0,0围绕阴影四周  0,3向下有3个像素的偏移
    self.layer.shadowOpacity = 0.15;   //设置阴影透明度
    self.layer.shadowRadius  = 5;      //设置阴影圆角
    self.layer.cornerRadius = 8;

    UIView *view = self.cycleScrollView ;
    CGRect rect = view.bounds;
    UIBezierPath* rounded = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(8, 8)];
    CAShapeLayer* shape = [[CAShapeLayer alloc] init];
    [shape setPath:rounded.CGPath];
    shape.frame = rect;
    view.layer.mask = shape;
}

同样上图中,我们给了父视图view添加tap事件,这样,当我们点击view视图中的任何位置都会导致选项按钮触发点击动作,这是我们想要的,但是有一天产品突然说要给轮播图添加点击事件,点击后能查看大图,这个时候发现轮播图的点击无效,与父视图的tap事件冲突了,解决办法如下:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    //解决点击子视图父视图时间相应的问题
    CGPoint point = [gestureRecognizer locationInView:self];//获取手势点击坐标
    if(CGRectContainsPoint(self.cycleScrollView.frame, point)) {
        //判断点是否在子视图范围内
        return NO;//父视图点击事件不响应
    }
    return  YES;//父视图点击事件响应
}

标签:layer,轮播,self,iOS,视图,阴影,点击,设置
From: https://www.cnblogs.com/qqcc1388/p/17791124.html

相关文章

  • win10开机密码取消更改和设置
    取消密码在搜索栏处输入【netplwiz】,看到提示后进入到用户帐户界面;或者直接按键盘上的windows图标按键+R键输入【netplwiz】这个命令,把【要使用本计算机,用户必须输入用户名和密码】前面的那个勾勾取消了,再点击一下【应用】。此时会提示让你输入两次密码,这个密码是你这个账户的密......
  • iOS 解决父视图点击事件导致子视图事件不触发
    如图,是蓝色父视图blueView添加tap事件,内部红色子视图redView的tap事件将会无法触发解决办法UITapGestureRecognizer*tap=[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(itemCLick)];tap.delegate=self;[self.blueViewaddGestureRecogni......
  • Excel设置日期格式没有反应
    1. 问题描述   将某一列转换为格式,发现怎么转换都不成功。   例如:想把10/20/231:40 转换成2023-10-201:40  却无法转换成功2. 解决方法   网上说的数据分列啥的方法都不好使,简单粗暴一点,直接利用DATE函数来解决即可。(1)第一步:       ......
  • iOS自动混淆测试处理笔记
    ​ 1 打开ipa,导出ipa 路径和配置文件路径会自动填充   ​2 点击开始自动混淆测试处理自动混淆测试是针对oc 类和oc方法这两个模块进行自动混淆ipa,并ipa安装到设备中运行,通过检测运行ipa包是否崩溃,来对oc类和oc方法进行筛选。如果崩溃,则该类名或方法名不可混淆......
  • CentOS7 设置防火墙操作、开放指定端口操作
    CentOS7设置防火墙操作、开放指定端口操作1,查看防火墙状态:firewall-cmd--statesystemctlstatusfirewalld.service2,开启防火墙:systemctlstartfirewalld.service(注意:开放防火墙后需要重启防火墙:firewall-cmd--reload)3,设置开机自启:systemctlenablefirewalld.servic......
  • qt 设置背景图片,图片出现锯齿
    qt给控件添加背景图片,通过有3种方式background-image;border-image;image其中通常用border-image;image。使用border-image,会出现图片失真,锯齿状严重ui->pushButton->setStyleSheet(“QPushButton{border-image:url(:/images/XXX.png);}”);使用image,会有边框,不适合qpushBu......
  • 如何在 Wget 中使用 Command Line Arguments 设置代理
    在使用Wget这个命令行工具进行文件下载时,有时我们需要通过代理服务器来进行网络连接。Wget提供了一些命令行参数,可以让我们设置代理服务器的信息。下面是如何在Wget中使用CommandLineArguments设置代理的步骤。首先,我们需要打开终端或命令提示符窗口,并进入到Wget的安装......
  • excel商品对应价格设置
    要现存在数据库,比如价    =IF(A2="","",VLOOKUP(A2,价!A:B,2,))......
  • 解决Intellij IDEA maven 自动设置JDK为JDK1.5
    在idea中创建maven项目,每次更新或重新载入maven项目后,都会重新变成JDK1.5,就算手动设置maven项目或者模块JDK1.8,刷新后还是会变为JDK1.5。这是由于创建项目时没有指定jdk版本,而maven的默认jdk版本为1.5导致的。解决方法:1.在当前maven项目pom文件中指定编译的jdk版本(项目指定)<p......
  • html中如何设置label自动换行
    html中如何设置label自动换行在HTML中,我们经常需要设置label标签,这是一种非常常见且重要的标签。在有些情况下,我们的label标签中的文本可能会超出一行,这时就需要设置自动换行。为了实现在label标签中自动换行,我们需要使用CSS语言中的white-space属性,将其设置为"pre-wrap"或"pre......