- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在从 UIBezierPath
创建一条虚线,如下所示:
这是我用来构建和绘制路径的代码:
const CGContextRef context = UIGraphicsGetCurrentContext();
const CGSize visibleSize = CGSizeMake(self.width - (kIndent * 2), self.height - (kIndent * 2));
UIBezierPath *borderPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(kIndent, kIndent, visibleSize.width, visibleSize.height) cornerRadius:kCornerRadius];
CGContextSetStrokeColorWithColor(context, [UIColor colorWithWhite:1.0 alpha:0.5].CGColor);
[borderPath setLineWidth:2.0];
[borderPath setLineCapStyle:kCGLineCapRound];
const CGFloat pattern[] = {6, 6};
[borderPath setLineDash:pattern count:2 phase:0];
[borderPath stroke];
我想要的是正方形的每个角都具有完全相同的曲率。我知道这最终将由我的模式值决定。我已经尝试从形状的宽度(宽度随屏幕宽度变化)计算不同的值,但我无法得到我想要的外观。
以前有没有人这样做过,或者有任何想法可以分享我将如何做到这一点?
最佳答案
这是我之前做的。不完美,但我认为这可以帮助你。
- (void)tailorRect:(CGRect)aRect dotsWidth:(CGFloat)dotWidth radius:(CGFloat)radius withColor:(UIColor*)color{
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSaveGState(c);
CGFloat minSpacing = 10;
CGFloat mWidth = aRect.size.width - radius *2;
CGFloat mHeight = aRect.size.height - radius *2;
int countW = mWidth / (dotWidth + minSpacing);
int countH = mHeight / (dotWidth + minSpacing);
CGFloat spacingW = (mWidth - (dotWidth * countW)) / (countW + 1);
CGFloat spacingH = (mHeight -(dotWidth * countH)) / (countH + 1);
CGContextSetLineCap(c, kCGLineCapRound);
CGContextSetLineWidth(c, 1.2);
CGRect tempRect = aRect;
for (int r = 0; r<=1; r++)
{
if (r==0)
{
CGContextSetStrokeColorWithColor(c, [[UIColor whiteColor] colorWithAlphaComponent:0.9].CGColor);
aRect = CGRectOffset(tempRect, 0, 0.5);
}
else
{
CGContextSetStrokeColorWithColor(c, color.CGColor);
aRect = tempRect;
}
for (int w = 0; w<=1; w++)
{
CGFloat y = (w==0) ? aRect.origin.y : CGRectGetMaxY(aRect);
CGPoint pointsW[countW*2];
for (int i = 0; i<countW*2; i++)
{
CGFloat x;
CGFloat startPointX = radius + spacingW +aRect.origin.x;
if (i%2 != 0)
{
x = startPointX
+ dotWidth * (i+1)/ 2
+ spacingW * ((int)i/2);
}
else
{
x = startPointX
+ (dotWidth+spacingW) * ((int)i/2);
}
pointsW[i] = CGPointMake(x, y);
}
CGContextStrokeLineSegments(c, pointsW, countW*2);
}
for (int h = 0; h<=1; h++)
{
CGFloat x = (h==0) ? aRect.origin.x : CGRectGetMaxX(aRect);
CGPoint pointsH[countH*2];
for (int j = 0; j<countH*2; j++)
{
CGFloat startY = radius + spacingH + aRect.origin.y;
CGFloat y;
if (j%2 != 0)
{
y = startY + dotWidth * (j+1)/2 + spacingH * ((int)j/2);
}
else
{
y = startY + (dotWidth + spacingH) * ((int)j/2);
}
pointsH[j] = CGPointMake(x, y);
}
CGContextStrokeLineSegments(c, pointsH, countH*2);
}
//radius
for (int i = 0; i<4; i++)
{
CGPoint point0;
CGPoint point1;
CGPoint point2;
switch (i) {
case 0:
point0 = CGPointMake(CGRectGetMinX(aRect), CGRectGetMinY(aRect) + radius);
point1 = CGPointMake(CGRectGetMinX(aRect), CGRectGetMinY(aRect));
point2 = CGPointMake(CGRectGetMinX(aRect) + radius, CGRectGetMinY(aRect));
break;
case 1:
point0 = CGPointMake(CGRectGetMaxX(aRect) - radius, CGRectGetMinY(aRect));
point1 = CGPointMake(CGRectGetMaxX(aRect), CGRectGetMinY(aRect));
point2 = CGPointMake(CGRectGetMaxX(aRect) , CGRectGetMinY(aRect) +radius);
break;
case 2:
point0 = CGPointMake(CGRectGetMaxX(aRect), CGRectGetMaxY(aRect) - radius);
point1 = CGPointMake(CGRectGetMaxX(aRect), CGRectGetMaxY(aRect));
point2 = CGPointMake(CGRectGetMaxX(aRect) - radius, CGRectGetMaxY(aRect));
break;
case 3:
point0 = CGPointMake(CGRectGetMinX(aRect), CGRectGetMaxY(aRect) - radius);
point1 = CGPointMake(CGRectGetMinX(aRect), CGRectGetMaxY(aRect));
point2 = CGPointMake(CGRectGetMinX(aRect) + radius, CGRectGetMaxY(aRect));
break;
default:
break;
}
CGContextMoveToPoint(c, point0.x, point0.y);
CGContextAddArcToPoint(c, point1.x, point1.y, point2.x, point2.y, radius);
CGContextStrokePath(c);
}
}
CGContextRestoreGState(c);
}
关于ios - 如何创建具有对称角的虚线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30204515/
这个问题已经有答案了: Reverse the ordering of words in a string (48 个回答) 已关闭 4 年前。 我想更改字符串中单词的位置。它需要对称变化。 示例 m
我的公司将为客户存储敏感数据,并将使用托管 .NET 加密算法类之一来加密数据。大部分工作已经完成,但我们还没有弄清楚如何/在哪里存储 key 。我已经做了一些简单的搜索和阅读,看起来硬件解决方案可能
我在 postgres 和对称 ds 的默认配置中使用对称 ds。 我总是收到以下错误。 2017-12-20 09:59:53,372 INFO [SymmetricLauncher] [Wrap
我正在使用 postgresql8.3 并在我的应用程序中包含 symmetris ds 1.5.1。但客户端到服务器的复制工作正常。但复制不是从服务器到客户端完成的。我是使用对称 ds 的新手。任何
我正在寻找一种与 JavaScript 和 Java 兼容的安全对称 key 加密算法。 我已经尝试实现一个,但我遇到了一些编码问题。 最佳答案 您不想使用 JavaScript 加密,especia
我读过 DDA .但我刚刚遇到symmetric DDA 这个术语。它是什么 ?它与 DDA 有何不同? 最佳答案 DDA(数字差分分析仪)算法用于找出任意给定两点之间的线性插值点(即直线)。现在,由
我已经使用 Spring Cloud Config Server 设置了一个简单的项目,我正在尝试简单地加密和解密一些值。我使用以下带有 Spring Boot 的 pom.xml 将项目创建为 Sp
我需要通过扩展 Symmetric DS 提供的接口(interface)来扩展它的功能。有谁知道开发流程应该是什么?在文档中,它只解释了将 JAR 文件(包含扩展接口(interface)的类)放在
我将在 中最多包含 50 个条目 map 。这样做的原因是我在初始握手后使用的协议(protocol)通过数字引用字符串名称 - 我假设服务器上必须存在与我的类似的 map 。 我想要的是一个可以搜
我在尝试编写这些函数时遇到困难。他们工作不正常,不知道我做错了什么。至于 Transitive,我什至无法开始,希望你能提供任何帮助,以及我在我的功能中做错了什么。谢谢。 示例输入: 0 1 2 3
什么是加密 SQL 数据库中某些敏感或个人身份数据的“最佳实践”(根据 PCI、HIPAA 或其他适用的合规性标准)? 这里有很多关于解决方案各个方面的问题,但我还没有看到任何在高层次上讨论该方法的问
我必须创建一个六边形,我真的希望它是完整的 HTML 和 CSS。它几乎完成了,除了它不是完全对称的。左 Angular 与右 Angular 不对齐。当前的CSS: .hexagon.outer {
我发现:“唯一需要 TURN 的情况是当其中一个对等点位于对称 NAT 后面,而另一个对等点位于对称 NAT 或端口限制 NAT 后面时。”那么,对称 NAT 后面的对等点如何连接后面的另一个点(例如
如何有效地按行的范数对矩阵进行排序(使用 numpy.ndarrays)? 我想对矩阵 A 进行排序: A = np.array( ( [ 10, 1, 6, 3 ],
我正在尝试使用 MBED TLS 加密函数来解开已使用我拥有的对称 key 使用 AES-128 key 包装进行加密的 key 。 我是加密新手,我的理解是 key 包装/解开与加密/解密不同。这是
所以基本上我的程序从用户选择的文本文件中加密/解密字符串。他可以选择五种算法之一。问题是当我用例如创建密文时。 AES然后将此密文保存到文本文件中,并想解密它以获取原始字符串,这是行不通的。有人可以指
我正在开展一个 OpenCL 项目以生成非常大的厄尔米特(对称)矩阵,并且我正在尝试确定生成工作 ID 的最佳方式。 厄密矩阵沿对角线对称,因此 M(i,j) = M*(j,i)。 在暴力方式下,fo
我想让底部圆圈对称,这意味着我希望第 5 个圆圈介于第 1 和第 2 个(但仍在下方)之间,第 7 个圆圈介于第 3 和第 4 个之间。 我在 v-for 循环中显示这个圆圈。我将它们全部放在一个容器
对于固定维数 (N=9) 的稠密线性系统(矩阵是对称的,半正定的)的快速求解,您会推荐哪种算法? 高斯消元法 LU分解 Cholesky 分解 等等? 类型是 32 位和 64 位 float 。 这
我有一个尺寸为行 x 列 x 深度的 3D 图像。对于图像中的每个体素,我计算了一个 3x3 实对称矩阵。它们存储在数组 D 中,因此具有形状 (rows, cols, deps, 6)。 D 为图像
我是一名优秀的程序员,十分优秀!