- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我写了一个关于Wave Animation的例子。动画没问题,但是我不明白为什么自定义UIView需要添加“self.layer.masksToBounds = YES”才能有圆角.
这是一个自定义 UIView。我重写了它的drawRect。如果我不将“masksToBounds”设置为 YES,圆角就会消失。
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.frame = CGRectMake(10, 40, 300, 300);
self.layer.cornerRadius = 150;
self.backgroundColor = [UIColor greenColor];
self.layer.borderColor = [UIColor blueColor].CGColor;
self.layer.borderWidth = 2;
// self.layer.masksToBounds = YES; //if write this line,the round corner appear
self.x_move = 0;
self.y_move = 300;
}
return self;
}
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGMutablePathRef path = CGPathCreateMutable();
CGContextSetLineWidth(context, 1);
CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor);
CGPathMoveToPoint(path, NULL, 0, 0);
for(float i=0; i<=300; i++){
float x=i;
float y = 5 * sin( 0.05 * x+ self.x_move) + self.y_move;
CGPathAddLineToPoint(path, nil, x, y);
}
CGPathAddLineToPoint(path, nil, 300, 0);
CGPathAddLineToPoint(path, nil, 0, 0);
CGContextAddPath(context, path);
CGContextFillPath(context);
CGContextDrawPath(context, kCGPathStroke);
CGPathRelease(path);
}
- (void)startAnimation {
if (self.waveTimer == nil) {
self.waveTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(refresh) userInfo:nil repeats:YES];
}
}
- (void)refresh {
self.x_move += 0.3;
self.y_move -= 0.2;
if(self.y_move - 100 < 0.00001){
[self.waveTimer invalidate];
}else{
[self setNeedsDisplay];
}
}
View Controller :
self.wave = [[waveAnimation alloc] init];
[self.wave startAnimation];
[self.view addSubview:self.wave];
这是一个普通的 UIView。它的“masksToBunds”是NO,但是它的圆角显示正常。对比上面的例子,为什么一个要加,一个不需要。
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 60, 100, 100)];
view.backgroundColor = [UIColor greenColor];
view.layer.cornerRadius = 50;
view.layer.borderWidth = 2;
view.layer.borderColor = [UIColor blackColor].CGColor;
[self.view addSubview:view];
最佳答案
这是因为您覆盖了 drawRect:(CGRect)frame
。
您正在尝试设置图层的角半径,该图层不是您为其指定填充颜色的元素。设置 masksToBounds
实现所需圆角的原因是因为您在这里告诉 View 将所有 layers 屏蔽到框架的边界。
在您使用 UIView
的第二个示例中,圆角半径按预期显示,因为您没有调整它的图层。
如果您需要 masksToBounds = NO
,我建议采用设置 masksToBounds
或以不同的方式重绘 View 的边界。由于您有“波浪形”sin 曲线并且您想要圆角,也许只需创建一个通用的圆角矩形(一个具有所需角半径的矩形),然后将其与您已经使用 sin 波创建的路径合并。
Merge multiple CGPaths together to make one path
该链接可以帮助您将圆形 View 与自定义 View 合并,以获得所需的最终结果。
否则.. 最好将其设置为是。
关于ios 覆盖drawRect后设置RoundCorner不起作用,但正常的UIView没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47533748/
大家平时都是怎么给自己的产品开发官方网站的? 是不是先在本地配置好环境,然后使用 IDE 写代码,写完代码后部署到服务器生成预览链接,团队协作成员再打开浏览器访问,然后你再修改,再部署,再访问,再修
请看下面我的构造函数,我正在从字符串创建一个分数: public Fraction(String str) { if(str.isEmpty()) {
当我向不可变 map 添加对象时,我注意到了这一点。 如果我添加一个对象,例如: Map model = ImmutableMap.of( "post", post
偶尔在我的网站上,我注意到无法加载外部文件。如果我重命名它并指向新名称,它就可以正常工作。旧名称不再有效。 通常这发生在图像上,但今天它发生在 css 文件上。它会自然而然地发生,而且是不可预测的。当
好的,我以 root 身份登录到 MySQL 命令行客户端。然后我以 root 身份使用 MySQLdb 模块打开或运行一个 python 应用程序。当我使用 python (IDLE) 检查结果时,
这个问题源于看Rasmus Lerdorf's talk from Drupalcon .顺便说一下,这个问题和他的演讲与 Drupal 没有任何关系……只是在他们的 session 上提出的。我自己
在使用 AJAX 提交创建表单后,我感到非常自豪,我在 IE8 中测试它并得到“消息:‘数量’未定义”。我读到这可能与早期版本的 IE 使用 ActiveX 进行 AJAX 请求有关,但我对 JS 很
对于我的一个项目,我必须对构造函数进行动态调用。但由于这是 Java 7,我使用 java.lang.invoke 而不是“经典”反射 API。 代码: @ParametersAreNonnullBy
基本上,我收到原始时间戳,我需要将它们格式化为 HH:MM:SS 格式。 最佳答案 这是一个提供 UTC 日期灵活格式的函数。它接受类似于 Java 的 SimpleDateFormat 的格式字符串
差不多两周后...我放弃了!!! 我实现了从图库和相机上传图片... startActivityForResult... ok! EXTERNAL_CONTENT_URI... ok! ACTIO
我有六张尺寸为 350x400 (WxH) 的 .jpg 图像。 我想将它们变成质量好(但不太重)且尺寸相同的 avi 文件 我正在做: /var/www/html/folder/ffmpeg/ffm
在我的应用程序中,我正在播放一些电影。我已经检查了电影的信息,它们似乎在 MPMoviePlayerController 应该能够处理的范围内(比特率等) 它们通过 URL 进行流式传输,并且只能在
program UInt32ToVariant; uses Vcl.Dialogs, System.SysUtils, System.Variants; var ui32Val: Cardin
无法弄清楚我的 Electron 项目出了什么问题。以 electron . 开头一个 native 模块(pkcs11js)将失败。见图片: 但运行 npm run dist将构建安装程序就好了,并
我正在使用 boost 文件系统获取当前目录的路径,然后检查该目录是否存在。 is_directory()没问题,但是 exists()在同一条路上失败了,我错过了什么吗? 示例代码(boost 1.
此使用 JFrames 的测试代码按预期工作(将在 10 秒后关闭)。 // **** Imports **** import java.awt.*; import javax.swing.JFram
我有一个相当复杂的 LINQ 查询,它通常很慢,它创建了一个 System.Data.SqlClient.SqlException : "等待操作超时"。 但是,当我记录生成的 SQL(通过将 Tex
这个问题在这里已经有了答案: When does JS interpret {} as an empty block instead of an empty object? (2 个答案) 关闭 5
我正在尝试实现一个哈希表。我收到上述错误,但 AFAIK 我已经正确声明了我所有的结构/typedef。 (我还在学C,sorry)错误发生在我的 while 循环中的 test.c 中,我在其中放置
例如 sprintf(pos,"%f ",cl.snap.ps.origin[0]); //don't start with strcat sprintf(tmp,"%f ",cl.snap.ps.o
我是一名优秀的程序员,十分优秀!