我正在尝试将一个按钮从我class JobA extends Job
{
private $taskList;
public function __construct(TaskList $taskList)
{
$this->taskList = $taskList;
}
public function handle()
{
$this->taskList->run();
}
}
class TaskList
{
private $tasks = [
TaskA::class,
TaskB::class,
...
];
public function run()
{
foreach($this->tasks as $task) {
// resolve $task and call it's own run method..
}
}
public function addToSchedule(Schedule $schedule)
{
$scheduler->job(new JobA($this))->everyFiveMinutes();
}
}
的可见边界外部动画到它的中心。我在我的故事板中有一个名为UIViewController
的约束设置,我将其作为动画的一部分删除,然后我想添加一个名为myButtonLeading
的新约束。
newCenterConstraint
我现在的代码正在向我提供有关我对@IBAction func updateDidTouch(_ sender: Any) {
UIView.animate(withDuration: 0.5, delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
let newCenterConstraint = NSLayoutConstraint(item: self.myButton, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1.0, constant: 0.0)
self.myButton.removeConstraint(self.myButtonLeading)
self.myButton.addConstraint(newCenterConstraint)
self.view.layoutIfNeeded()
}, completion: nil)
}
的引用的以下错误消息。
隐含使用' self'关闭;使用' self。'捕获 语义显式
但当我使用toItem: view
时,我的应用程序崩溃并显示错误消息:
无法在视图上安装约束。约束是否引用 来自视图子树外的东西?这是非法的。
在添加新的centerX约束时,我在哪里出错?
答案 0 :(得分:3)
错误很明显。您正在将引用self.view
的约束添加到self.view
的子视图。
要解决此问题,请替换此行:
self.myButton.addConstraint(newCenterConstraint)
使用:
self.view.addConstraint(newCenterConstraint)
然而,正如Lou Franco所建议的那样,更好的方法是改变中心x约束的常量和动画layoutIfNeeded
函数,而不是动画添加新约束。 (为此,您必须连接中心x约束的插座。)
看起来像这样:
UIView.animate(withDuration: 0.5, delay: 0, options: UIViewAnimationOptions.curveEaseInOut, animations: {
self.centerConstraint.constant = 0
self.view.layoutIfNeeded()
}, completion: nil)
答案 1 :(得分:0)
我只会使用带有常量的centerX约束来在屏幕外偏移它。然后动画将常量设置为0。