- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我快要解决这个问题了,但是有一个部分给我带来了麻烦。我试图模仿一个标尺对象,用户可以旋转、缩放和放置在 Canvas 上,然后沿着边缘追踪以在 Canvas 上做一个标记。我遇到的问题是无论用户的手指去哪里,都得到线上的下一个点。我可以将法线从该点追溯到沿着我所拥有的边缘的一个小透明 View ,但是由于锯齿(或其他原因),当它以除纯直线角度(0、90、180)以外的任何角度绘制时,该线会抽动, 270).我还尝试编写一个像 CGRectContainsPoint 这样的函数,除了它需要一个任意旋转的矩形,但我没有成功。
下面是根据用户触摸计算点数的代码:
- (CGPoint)perpendicularPointFromPoint:(CGPoint)point
{
CGPoint testPoint1 = point;
CGPoint testPoint2 = testPoint1;
CGPoint pointToUse = CGPointZero;
//Get the right angle to the current rotation, and make
//a unit vector in that direction
CGFloat rightAngle = mCurRotation + M_PI_2;
CGFloat xInc = cosf(rightAngle);
CGFloat yInc = sinf(rightAngle);
//Check both "forward" and "backward"
int counter = 0;
while(pointToUse.x == 0)
{
testPoint1.x += xInc;
testPoint1.y += yInc;
testPoint2.x -= xInc;
testPoint2.y -= yInc;
//mLineOutline is a small view on top of the ruler (transparent)
if([self.superview hitTest:testPoint1 withEvent:nil] == mLineOutline)
{
pointToUse = testPoint1;
}
else if([self.superview hitTest:testPoint2 withEvent:nil] == mLineOutline)
{
pointToUse = testPoint2;
}
else if(counter++ > 1000) //Neither ray intersects the ruler
pointToUse.x = -1.f;
}
return CGPointMake(roundf(pointToUse.x), roundf(pointToUse.y));
}
但是,无论出于何种原因,线条在我绘制时会抖动(上下只有几个像素,但非常明显)。我能做些什么来解决这个问题?还有,有没有比较别扭的方法?
最佳答案
Josh Caswell 的评论给了我一个主意。在 this article,它表示 children 中的坐标存储在本地空间中。我以前就知道这一点,但不知怎的我忘记了这意味着无论你如何旋转它, View 总是朝上的。它仅根据其在世界空间(或父空间)中的坐标进行旋转。
因此,我不是在父 View 上获取触摸点然后进行计算,而是在 subview 上获取触摸点。将它的 y 值更改为 -2 或任何我想要的值(就在标尺上方,因为它在局部空间中总是面朝上)然后 [self convertPoint:point toView:self.superview];
让 View 层次结构处理困难的部分。
关于objective-c - 沿标尺对象的边缘绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11534440/
我对 YAML 数据 block 有疑问。给定以下 pandoc 文档: --- papersize: a4 geometry: "left=1.5cm,right=1.5cm,top=3cm,bot
我对 YAML 数据 block 有疑问。给定以下 pandoc 文档: --- papersize: a4 geometry: "left=1.5cm,right=1.5cm,top=3cm,bot
在 Xcode 中,界面构建器是否具有某种可自定义的标尺(如 Photoshop 中的标尺)来帮助我正确定位元素? 我知道它会出现那些红线,但我的意思是你可以定位自己的线。 谢谢,丹。 最佳答案 我找
我有疑问。我正在编写像 this 这样的编辑器,我还想要一个标尺来添加它(它通过鼠标滚动(放大和缩小)更改值) 可是我做不到。我在 github 上尝试了所有标尺,但它们只运行 body 标签。 很遗
我更新了 chrome,当我打开 devtools 时,我看到了这个。 如何去掉标尺(上部和右侧的黑色部分)?它需要很大的空间,而且我有一个 13.3 英寸的小屏幕。 最佳答案 F12;左上角望远镜图
我是一名优秀的程序员,十分优秀!