我正在制作一个简单的应用程序,遵循The Big Nerd Ranch iOS书。
我从CGRect得到了这个特殊的回应,无论输入什么值,它都不会离开模拟器的原点。
我创建了一个名为HypnosisView的简单UIView类,它没有任何代码。
以下是我在AppDelegate中使用的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
CGRect firstFrame = CGRectMake(160, 240, 100, 150);
HypnosisView *firstView = [[HypnosisView alloc] initWithFrame:firstFrame];
firstView.backgroundColor = [UIColor redColor];
[self.window addSubview:firstView];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
以下是创建的内容:
我希望这是Xcode 6的另一个怪癖而不是我犯过的一些愚蠢的错误,但是我已经看了好几个小时了,而且我厌倦了它。
编辑:我想我发现了我的问题,但它提出了一个侧面问题。
#import <UIKit/UIKit.h>
@interface HypnosisView : UIView
@property (nonatomic) CGRect frame;
@end
这是我的HypnosisView.h文件和超类中的代码显然拥有它自己的 initWithFrame 版本。
如果你没有覆盖超类的功能,他们可以偶然调用你的实例变量吗?
例如,这里我们有示例函数:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
}
自我最终会等于实例变量&#34; frame&#34;?即使我从未调用 initWithFrame 函数,所以超级版本应该超出范围?