2

私はCocoaの開発に不慣れであり、これは初心者の問題だと思います。

特注のUIViewを使用してシンプルな背景キャンバスを作成しています。後日ツールバーを追加できるように、このキャンバスをメインビューから少しインデントして作成できると期待していました。ただし、initWithFrame(およびその他のinit)を使用すると、キャンバスは常にフルスクリーンよりもわずかに小さいサイズではなく、フルスクリーンのサイズになるように作成されます。CGRectの値を完全にオーバーライドしても、違いはありません。touchesBeganイベントを設定し、成功を判断できるように背景色を緑色に設定しましたが、取得できるのは完全に緑色の画面とどこでも機能するタッチイベントだけです。

助けてください-これは私を怒らせており、ウェブ上のどこにも答えを見つけることができません。

関連するコードは次のとおりです(これまでのところ、アプリ全体でこれよりも多くのコードは実際にはありません)。

AppDelegate

- (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;

}

MainViewController.h

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

@interface MainViewController : UIViewController

@property (strong, nonatomic) viewCanvas *objViewCanvas;

-(id)init;

@end

MainViewController.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];

}

viewCanvas.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

デフォルトでは、View Controllerのビューが画面全体を占めると思うので、そのビューにサブビューを追加する必要があります。これは、より小さな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 に答える