如何以UIButton编程方式创建基本?例如,在我的视图控制器中,执行该viewDidLoad方法时,UIButton将动态创建三个s并设置其布局或属性.
自上周以来我一直试图解决这个问题,而没有更进一步.好的,所以我需要在Swift中以编程方式应用一些约束 来使用这段代码:UIView
var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100));
new_view.backgroundColor = UIColor.redColor();
view.addSubview(new_view);
var constX:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0);
self.view.addConstraint(constX);
var constY:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0);
self.view.addConstraint(constY);
var constW:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: new_view, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: 0);
self.view.addConstraint(constW);
var constH:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: …Run Code Online (Sandbox Code Playgroud) 我有时在运行我的应用程序时在Xcode 8b3的日志中收到此消息,一切似乎都有效,但我想知道它来自何处.谷歌根本没有帮助.
我不想要UIButton或类似的东西.我想UIControl直接子类化并制作我自己的非常特殊的控件.
但由于某种原因,我所覆盖的任何方法都没有被调用过.目标动作的东西起作用,目标接收适当的动作消息.但是,在我的UIControl子类中,我必须捕获触摸坐标,这样做的唯一方法似乎是覆盖这些人:
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
NSLog(@"begin touch track");
return YES;
}
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
NSLog(@"continue touch track");
return YES;
}
Run Code Online (Sandbox Code Playgroud)
它们永远不会被调用,即使它UIControl是使用指定的初始化程序实例化的UIView,initWithFrame:.
我可以找到的所有示例总是使用UIButton或UISlider作为子类的基础,但我想更接近,UIControl因为这是我想要的源:快速和未延迟的触摸坐标.
当我在iPhone或iPad上为每个允许的设备方向拖动它时,我想要一个球来跟踪我的手指.当旋转设备时,视图似乎正确居中,但是当我拖动它时,球不会停留在圆周上并且似乎在任何地方.
编辑
Martin R的答案现在按要求显示.我唯一的额外代码更改是删除不必要的声明var shapeLayer = CAShapeLayer()
在我尝试将球和轨迹都限制在视图中心并将球的中心坐标作为偏移量添加到运行时之前,这个例子中的数学非常有意义.我遵循了有关如何约束视图的这些建议.
有三件事我不明白.
首先,从两个变量计算圆的周长trackRadius和角度theta,并使用sin和cos的theta发现x和y坐标不会把球在合适的位置.
其次,atan用于找到theta视图中心与被触摸点之间的角度,并使用trackRadiuswith theta来查找x和y坐标不会将球放置或沿圆周移动到新的位置.
第三,每当我拖动球时,调试区域中的消息都会显示Xcode is Unable to simultaneously satisfy constraints,尽管在拖动之前没有报告任何约束问题.
这里可能存在多个问题.我的大脑开始受到伤害,如果有人能够指出我做错了什么,我将不胜感激.
这是我的代码.
import UIKit
class ViewController: UIViewController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return .all }
var shapeLayer = CAShapeLayer()
let track = ShapeView()
var ball = ShapeView() …Run Code Online (Sandbox Code Playgroud)