我希望图片移到底部。如果按按钮,图片应向下移动1。
我添加了图片和一个按钮:
var corX = 0
var corY = 0
var runter: UIButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
var image = UIImage(named: "panzerBlau.jpg");
var panzer = UIImageView(frame: CGRectMake(corX, corY, 30, 40)); //
override func viewDidLoad() {
super.viewDidLoad()
panzer.image = image; //
self.view.addSubview(panzer); //
runter.frame = CGRectMake(100, 30, 10 , 10)
runter.backgroundColor = UIColor.redColor()
view.addSubview(runter)
runter.addTarget(self, action: "fahren", forControlEvents:UIControlEvents.TouchUpInside)
}
至少我在函数“ fahren”中说过将图片向下移动1。
func fahren(){
corY += 1
panzer.frame = CGRectMake(corX, corY, 30, 40) //
self.view.addSubview(panzer);
}
所以我的问题是:这些corX和corY东西会出现一些错误。没有它们,它会完美地工作,但比起一次性按钮就好。错误是:ViewController.Type没有名为corX的成员,而ViewController.Type没有名为panzer的成员。
PS:我使用Xcode Beta5
这是没有其他内容的完整代码:
import UIKit
class ViewController: UIViewController {
var corX = 0
var corY = 0
var runter: UIButton = UIButton.buttonWithType(UIButtonType.System) as UIButton
var image = UIImage(named: "panzerBlau.jpg");
var panzer = UIImageView(frame: CGRectMake(corX, corY, 30, 40));
override func viewDidLoad() {
super.viewDidLoad()
panzer.image = image;
self.view.addSubview(panzer);
runter.frame = CGRectMake(100, 30, 10 , 10)
runter.backgroundColor = UIColor.redColor()
view.addSubview(runter)
runter.addTarget(self, action: "fahren", forControlEvents:UIControlEvents.TouchUpInside)
}
func fahren(){
corY += 100
panzer.frame = CGRectMake(corX, corY, 30, 40)
self.view.addSubview(panzer);
}
}
@MartinR在这里指出了主要问题:
var corX = 0
var corY = 0
var panzer = UIImageView(frame: CGRectMake(corX, corY, 30, 40))
问题在于,Swift默认初始化器无法引用另一个属性的值,因为在初始化时,该属性尚不存在(因为实例本身尚不存在)。基本上,在panzer
的默认初始值设定项中,您隐式地引用self.corX
和self.corY
-,但是没有,self
因为self
这正是我们在创建过程中所需要的。
一种解决方法是使初始化程序变得懒惰:
class ViewController: UIViewController {
var corX : CGFloat = 0
var corY : CGFloat = 0
lazy var panzer : UIImageView = UIImageView(frame: CGRectMake(self.corX, self.corY, 30, 40))
// ...
}
这是合法的,因为panzer
直到您的实际代码首次引用它时才进行初始化。到那时,self
它的属性已经存在。
问题内容: 您如何初始化此: DI框架,反思,更好的设计? 动机和用例(添加) : 我的特殊用例是简化和的子类中的字段访问。因此,我将它们注入以通过派生类中的字段短期引用它们,而无需在每个子类中显式声明。 问题答案: 您可以使用工厂方法
但是我得到错误“在初始化之前使用属性”这是有道理的,因为我只声明。但是我不知道我应该如何或为了什么初始化输入,因为值是输入
问题内容: 我已经搜索了很多,但是我发现的主要是python中的递归编程示例。因此,问题来了: 我该如何实现? 问题答案: 一切在Python中都是动态的-甚至是类声明。在初始声明之后,没有什么可以阻止您修改类的内容的: 注意:如果您不太熟悉Python,则该关键字仅允许您说“这里什么都没有”-除非A类的空值与本例中的一样空,否则它并不重要!
问题内容: 我想从属性文件中的init我的ORB(通常我初始化它像这样,在运行我的例子: ) 我写了一个简单的代码: 然后尝试初始化我的球体: 但是有一些错误: 我的config.properties文件: 我做错了什么? 通常,当我初始化我的ORB时,一切都很好,所以它不是代码问题,而是文件初始化的问题。 问题答案: 您还必须添加到ORB参数。将其与您通常使用的命令行进行比较。所有参数都必须传递
我在代码中使用了合成属性。但想知道它如何以及何时初始化Android中的每个视图。 我们只提供导入和访问每个视图的ID。何时为视图对象分配内存?
我对阿帕奇骆驼很陌生。我们需要同时处理多个动态的路由生命周期。 “等待,因为仍有2个飞行和挂起的交换要完成,超时300秒。”-此消息继续 没有打印任何内容,但B不工作(没有日志,没有任何内容)