2

我是 Cocoa 开发的新手,我怀疑这是一个菜鸟问题。

我正在使用定制的 UIView 创建一个简单的背景画布。我希望我能够创建这个画布,使其从主视图略微缩进,以便我可以在以后添加工具栏。但是,当我使用 initWithFrame (以及任何其他 init )时,画布总是被创建为全屏的大小,而不是略小于全屏。即使我完全覆盖了 CGRect 的值,它也没有什么区别。我设置了一个 touchesBegan 事件并将背景颜色设置为绿色以便能够确定成功,但我得到的只是一个完全绿色的屏幕和一个在任何地方都有效的触摸事件。

请帮助 - 这让我发疯,我在网络上的任何地方都找不到答案。

相关代码如下(目前整个应用程序中实际上并没有比这更多的代码):

应用委托

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.objMainViewController = [[MainViewController alloc] init];
self.window.rootViewController = self.objMainViewController;
[self.window makeKeyAndVisible];

return YES;

}

主视图控制器.h

#import <UIKit/UIKit.h>
#import "viewCanvas.h"

@interface MainViewController : UIViewController

@property (strong, nonatomic) viewCanvas *objViewCanvas;

-(id)init;

@end

主视图控制器.m

#import "MainViewController.h"
#import "viewCanvas.h"

@implementation MainViewController

@synthesize objViewCanvas;

-(id)init
{

    if (self = [super init]) {
        CGRect frame = CGRectMake(100, 100, 100, 100);
        objViewCanvas = [[viewCanvas alloc] initWithFrame:frame];     
    }
    return self;
}

- (void)loadView {

   self.view = objViewCanvas;

}

- (void)viewDidLoad
{
    [super viewDidLoad];

}

视图画布.h

#import <UIKit/UIKit.h>
#import "viewCanvas.h"

@interface viewCanvas : UIView {

}

//Init
- (id) initWithFrame:(CGRect)frame;

//Events
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

@end

viewCanvas.m

#import "viewCanvas.h"

@implementation viewCanvas

//Standard inits
- (id) initWithFrame:(CGRect)frame{   

self = [super initWithFrame:frame];
[self setBackgroundColor:[UIColor greenColor]];
return self;

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Touches Began Canvas" message:@"Canvas Touches Began" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles: nil]; 
    [alert show];

}

@end
4

1 回答 1

1

我认为默认情况下,视图控制器的视图会填满整个屏幕,因此您需要向该视图添加一个子视图,即较小的 viewCanvas 对象(顺便说一句,您应该遵守命名规则并用大写字母 ViewCanvas 命名您的类) . 在 MainViewController .m 文件中试试这个:

    -(id)init{
    if (self = [super init]) {
        CGRect frame = CGRectMake(100, 100, 100, 100);
        objViewCanvas = [[ViewCanvas alloc] initWithFrame:frame]; 
        self.contentView = [[UIView alloc] initWithFrame:CGRectMake(1, 1, 1, 1)]; //this frame doesn't matter
        [self.contentView setBackgroundColor:[UIColor whiteColor]];
    }
    return self;
}

- (void)loadView {
    self.view = self.contentView;
    [self.view addSubview:objViewCanvas];
}
于 2012-07-23T02:43:36.190 回答