- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题类似于以下问题:
Negative coordinates in UIView.frame
iOS使用UIKit绘图时,默认原点位于左上角;为什么?
我需要原点位于框架的中心;我想要绘制的坐标包含负数
我一直在搜索,但找不到如何使用 UIKit 在 Swift 3 中绘制数据点
这是我目前拥有的:
import Foundation
import UIKit
@IBDesignable
public class Contours: UIView {
public var gridColor: UIColor = UIColor.clear
public var gridSize: CGSize = CGSize(width: 100, height: 100)
public var gridView = UIView(frame: CGRect(origin: .zero, size: .zero))
public var dataSize: CGSize = CGSize(width: 5, height: 5)
public var dataColor: UIColor = UIColor.blue
public var dataLineColor: UIColor = UIColor.red
public var dataBorderWidth: CGFloat = 1.0
public var dataView = UIView(frame: CGRect(origin: .zero, size: .zero))
public var fade: CGFloat = 0.5
public var distances: [Int] = [2601, 2600, 33, 2608, 2601, 2594, 2625, 2633, 2637, 2651, 2656, 2666, 2683, 2690, 2705, 2712, 2712, 2739, 2752, 53, 1103, 1060, 1019, 980, 944, 911, 33, 851, 826, 801, 777, 757, 737, 718, 701, 683, 667, 654, 53, 486, 470, 457, 448, 440, 432, 424, 416, 409, 403, 396, 389, 383, 378, 372, 367, 362, 357, 353, 348, 344, 340, 336, 333, 329, 326, 323, 319, 317, 314, 311, 309, 307, 305, 303, 301, 299, 298, 297, 295, 294, 293, 292, 291, 290, 290, 290, 290, 291, 293, 295, 303, 386, 383, 53, 350, 53, 53, 53, 53, 53, 3, 364, 362, 360, 356, 358, 355, 353, 351, 350, 349, 347, 345, 53, 53, 53, 308, 3, 309, 309, 312, 313, 315, 316, 319, 321, 53, 329, 332, 335, 332, 53, 53, 53, 53, 53, 53, 53, 3, 53, 53, 53, 53, 53, 53, 670, 33, 706, 728, 750, 772, 799, 825, 856, 887, 925, 755, 749, 744, 739, 734, 730, 727, 722, 719, 716, 714, 634, 709, 706, 704, 703, 701, 699, 700, 695, 697, 697, 338, 696, 697, 696, 698, 698, 700, 702, 703, 705, 707, 710, 712, 714, 718, 53, 53, 53, 53, 53, 53, 53, 53, 3, 53, 53, 53, 53, 53, 53, 53, 53, 3, 53, 53, 53, 53, 53, 53, 53, 3412, 3397, 3384, 53, 3538, 3603, 53, 2426, 2412, 2363, 2330, 2288, 2262, 2214, 2190, 2162, 2130, 53, 53, 53, 2807, 2631, 2408, 2638, 2607, 2601, 2562, 2534, 2515, 2496, 2478, 2462, 2445, 53, 53, 53, 1751, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 3, 53, 53, 53, 53, 53, 2643, 2643, 53, 2660, 53, 2528, 2523, 2221, 1955, 1684, 1677, 1684, 1694, 1705, 1202, 1204, 1211, 1217, 1225, 1233, 1239, 1249, 1259, 1270, 1280, 1289, 1280, 1011, 991, 977, 968, 966, 964, 968, 975, 984, 1003, 2, 53, 1297, 53, 53, 33, 1321, 1299, 1274, 1254, 1233, 1232, 1264, 1293, 3802, 53, 53, 53, 53, 53, 53, 53, 3, 53, 2878, 2870, 2848, 2821, 2803, 2788, 2769, 2753, 2740, 2708, 2711, 2701, 2682, 2656, 2664, 2644, 2644, 2631, 2626, 2616, 2610, 2604, 2605, 2605, 2600, 2598, 2603]
public var distx: [Double] = []
public var disty: [Double] = []
public var scalex: [Double] = []
public var scaley: [Double] = []
override public init(frame: CGRect) {
super.init(frame: frame)
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
public override func draw(_ rect: CGRect) {
alpha = 1
layer.backgroundColor = gridColor.cgColor
clipsToBounds = false
for index in 0...356 {
let radians = Double(index) * M_PI / 180.0
let x = Double(distances[index]) * cos(Double(radians))
let y = Double(distances[index]) * sin(Double(radians))
distx.append(x)
disty.append(y)
}
let xmin: Double = Double(distx.min()!)
let xmax: Double = Double(distx.max()!)
let ymin: Double = Double(disty.min()!)
let ymax: Double = Double(disty.max()!)
let scale = max(xmax - xmin, ymax - ymin)
var circles = [UIView]()
circles.reserveCapacity(360)
for _ in 0...356 {
circles.append(UIView(frame: CGRect(origin: .zero, size: .zero)))
}
print("width: \(bounds.width), height: \(bounds.height)")
for index in 0...356 {
let radians = Double(index) * M_PI / 180.0
let x = (Double(distances[index]) * cos(Double(radians)) / scale) * Double(325)
let y = (Double(distances[index]) * sin(Double(radians)) / scale) * Double(325)
var aPath = UIBezierPath()
aPath.move(to: CGPoint(x: 0, y: 0))
aPath.addLine(to: CGPoint(x: x, y: y))
UIColor.cyan.set()
aPath.stroke()
aPath.fill()
aPath.close()
circles[index].alpha = 1
circles[index].frame = CGRect(origin: .zero, size: dataSize)
circles[index].center = CGPoint(x: x, y: -y)
circles[index].layer.backgroundColor = dataColor.cgColor
circles[index].layer.borderColor = dataLineColor.cgColor
circles[index].layer.borderWidth = dataBorderWidth
circles[index].layer.cornerRadius = circles[index].bounds.width / 2
if let superview = circles[index].superview {
superview.bringSubview(toFront: circles[index])
} else {
addSubview(circles[index])
}
scalex.append(x)
scaley.append(y)
}
dataView.frame = CGRect(origin: .zero, size: dataSize)
dataView.center = CGPoint(x: bounds.width / 2, y: bounds.height / 2)
dataView.layer.backgroundColor = UIColor.cyan.cgColor
}
private func reset() {
UIView.animate(withDuration: 0.25) { () -> Void in
self.gridView.center = CGPoint(x: self.bounds.width / 2, y: self.bounds.height / 2)
}
}
}
class ViewController: UIViewController {
@IBOutlet private weak var joystickMove: Joystick!
@IBOutlet private weak var joystickRotate: Joystick!
@IBOutlet private weak var objectView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
createJoystick()
createContours()
// joystickMove.trackingHandler = { (joystickData) -> () in
// //print("joystickMove data: \(joystickData)")
//
// let scale: CGFloat = 5.0
//
// self.objectView.center.x += joystickData.velocity.x * scale
// self.objectView.center.y += joystickData.velocity.y * scale
// }
//
// joystickRotate.trackingHandler = { (joystickData) -> () in
// //print("joystickRotate data: \(joystickData)")
//
// self.objectView.transform = CGAffineTransform(rotationAngle: joystickData.angle)
// }
}
private func createJoystick() {
// 1. Initialize an instance of `Joystick` using the constructor:
let joystick = Joystick()
let width: CGFloat = 100
let hieght: CGFloat = 100
let x_center = CGFloat(UIScreen.main.bounds.width/2) - CGFloat(width/2)
let y_center = UIScreen.main.bounds.height - UIScreen.main.bounds.height/4
joystick.frame = CGRect(x: x_center, y: y_center, width: width, height: hieght)
joystick.backgroundColor = UIColor.clear
// 2. Customize the joystick.
joystick.substrateColor = UIColor.lightGray
joystick.substrateBorderColor = UIColor.gray
joystick.substrateBorderWidth = 1.0
joystick.stickSize = CGSize(width: 50, height: 50)
joystick.stickColor = UIColor.darkGray
joystick.stickBorderColor = UIColor.black
joystick.stickBorderWidth = 2.0
joystick.fade = 0.5
// 3. Setup the tracking handler to get velocity and angle data:
// joystick.trackingHandler = { (joystickData) -> () in
// self.objectView.center.x += joystickData.velocity.x
// self.objectView.center.y += joystickData.velocity.y
// }
// 4. Add the joystick to your view:
view.addSubview(joystick)
}
private func createContours() {
let contour = Contours(frame: CGRect(x: 90.0, y: 175.0, width: 250.0, height: 250.0))
view.addSubview(contour)
}
@IBAction func resetButtonTapped(sender: AnyObject) {
UIView.animate(withDuration: 0.5) { () -> Void in
self.objectView.center = self.view.center
// self.objectView.transform = CGAffineTransformIdentity
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
注意我的圆和线的位移:
以前是这样的:
最佳答案
最简单的方法是使用 CGAffineTransform。
这是一个很好的博客,解释了它们:http://iphonedevelopment.blogspot.ca/2008/10/demystifying-cgaffinetransform.html
但是,看起来您所需要的只是翻译。
因此创建您的转换:
let t = CGAffineTransform(translationX: bounds.width/2, y: bounds.height/2)
然后你想要的新坐标集上的每个点
let newPoint = oldPoint.applying(t)
您还可以使用它们来缩放值以适合您的屏幕。这是我用来绘制一些图表的仿射变换作为示例:
let chartTransform = CGAffineTransform(a: innerWidth/xMax, b: 0, c: 0, d: -innerHeight/yMax, tx: origin.x, ty: origin.y + innerHeight)
A 和 D 分别缩放 X 和 Y。因此,我按 View 宽度/最大 X 值的比率缩放 x 值,并按相同比例缩放 y 值。但因为 Y 随着你的下降而增加,所以我用负数翻转了比例。这会将正 y 轴置于垂直方向。为了对此进行调整,我必须将每个值向下平移图表的长度。 origin.x 和 origin.y 只是我开始绘制轴的小缩进。
关于swift - 如何在 UIView Swift 3 中包含负坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40596325/
我有一个点(粉色圆圈),它有一个已知的 X 坐标和一个已知的 Y 坐标,但 Y 坐标> 坐标不正确。它当前位于目标贝塞尔曲线(部分位于白色正方形中的曲线)所在的点(如果它是两点之间的一条线)。我需要为
有一个基于QML 和QWT 的代码,一种具有更多可能性的图形生成器。技术要求之一是根据某个 X 坐标获得绘图曲线的 Y 坐标。 有一种不准确的方法 - 获取 QwtPlotCurve 的 QPoint
我目前正在将对象的 3D 坐标转换为 2D 坐标,然后在其上绘制 2D 文本(目前是对象名称): public static int[] getScreenCoords(double x, doubl
首先,我创建一个元组列表(要绘制的点)。每个元组由 3 个数字组成(x - 坐标,y - 坐标,c - 点的颜色) import random import matplotlib.pyplot as
我正在制作一个 2 人 Java 游戏,但我需要确保坐标保留在板上。 addPiece(1, 1, "X"); addPiece(8, 8, "O"); showBoard(); Scanner my
我想检查我是否正确使用了 scipy 的 KD 树,因为它看起来比简单的暴力破解要慢。 关于这个我有三个问题: Q1. 如果我创建以下测试数据: nplen = 1000000 # WGS84 lat
我有一个 GeoJSON 文件,我正在尝试处理它以便在谷歌地图上绘制一些功能。然而,问题在于坐标不是传统的纬度/经度表示法,而是一些大的六位/七位数字。示例: { "type":
我在使用坐标时遇到格式化问题。 public class Coordinate { public int x; public int y; public Coordinate( int x
我正在尝试获取当前位置的经度和纬度坐标。这是到目前为止我的代码: public class MainActivity extends AppCompatActivity { @Override pro
基本上,我需要获取从 OpenGL 中的贝塞尔曲线实现绘制的所有坐标。具体来说,我需要坐标来沿着弯曲的轨迹路径移动场景中的球体对象(棒球)。这是我用来绘制曲线的: GL2 gl = drawable.
现在我用 JAVA 遇到了一些问题,但不记得如何获取坐标系之间的长度。 例如。A 点 (3,7)B点(7,59) 我想知道如何计算a点和b点之间的距离。非常感谢您的回答。 :-) 最佳答案 A = (
我正在用 Pi2Go 机器人制作一个小项目,它将从超声波传感器获取数据,然后如果它看到一个物体,则放置一个 X,并放置 O 它当前所在的位置,我有两个问题:如何在 tkinter 上设置坐标位置?例如
如何在 pygame 中存储对象的先前坐标?我的问题可能有点难以解释,但我会尽力,如果您自己尝试我的代码以理解我的意思可能会有所帮助。 这就是我的游戏的内容。我希望这能让我的问题更容易理解。 我正在创
如何存储用户的当前位置并在 map 上显示该位置? 我能够在 map 上显示预定义的坐标,只是不知道如何从设备接收信息。 此外,我知道我必须将一些项目添加到 Plist 中。我怎样才能做到这一点? 最
我在 android 应用程序开发方面不是很熟练,我正在开发一个测试应用程序。我检测到了脸和眼睛,现在我要根据眼睛的坐标在脸上画一些像粉刺或疤痕的东西(例如脸颊上的眼睛下方)。稍后,我会把眼镜或帽子放
所以我正在使用 API 来检测图像中的人脸,到目前为止它对我来说效果很好。然而,我一直无法弄清楚如何将图像裁剪到脸上。我知道如何裁剪位图,但它需要获取位图中脸部的左上角位置以及宽度和高度。当我使用 查
我有 2 个表。第一个表包含以下列:Start_latitude、start_longitude、end_latitude、end_longitude、sum。 sum 列为空,需要根据第二张表进行填
有没有办法给 Google Maps API 或类似的 API 一个城镇名称,并让它返回城镇内的随机地址?我希望能够将数据作为 JSON 获取,以便我可以在 XCode 中使用 SwiftyJSON
我将坐标保存在 numpy 数组 x 和 y 中。现在我想要的只是获得一个多边形(分别是点数组),它用给定的宽度参数定义周围区域。 我遇到的问题是我需要一个没有(!)交叉点的多边形。但是,当曲线很窄时
我正在开发井字游戏 (3x3),所以我有 9 个按钮,我想做的是获取用户按下的按钮的坐标,并在按钮的位置插入图像。 例子: @IBOutlet weak var button1Outlet: UIBu
我是一名优秀的程序员,十分优秀!