タッチされた位置の確認

View内のタッチされた位置に丸を表示する。

#import 
@interface StudyAppDelegate : UIResponder 
@property (strong, nonatomic) UIWindow *window;
@end
#import "StudyAppDelegate.h"
#import "MyView.h"
@implementation StudyAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    //MyViewクラスのviewを表示させる
    MyView* view = [[MyView alloc] initWithFrame:CGRectMake(10, 10, 300, 300)];
    view.backgroundColor = [UIColor yellowColor];
    [self.window addSubview:view];
    
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application{}
- (void)applicationDidEnterBackground:(UIApplication *)application{}
- (void)applicationWillEnterForeground:(UIApplication *)application{}
- (void)applicationDidBecomeActive:(UIApplication *)application{}
- (void)applicationWillTerminate:(UIApplication *)application{}

@end
#import 
@interface MyView : UIView
{
    CGPoint location;
}

@end
#import "MyView.h"
@implementation MyView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

//矩形描画メソッド
- (void)drawRect:(CGRect)rect
{
    //  描画先情報を得る。
    CGContextRef context = UIGraphicsGetCurrentContext();
    //  位置と大きさをしていして、丸を描画する
    CGContextFillEllipseInRect(context, CGRectMake(location.x, location.y, 50, 50));
}


//タッチが開始された時に実行されるメソッド
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //touchesの情報をtouchpointに格納
    UITouch* touchpoint = [touches anyObject];
    //  touchpointのいち情報を取り出し、locationに格納
    location = [touchpoint locationInView:self];
    //  描画の必要がある事を自身に通知する。
    [self setNeedsDisplay];
}

@end

  • どの位置をタッチしたなどの情報は、-touchesBegan:withEvent:メソッドの引数、touchesに格納されている。
  • NSSetクラスのtouchesには複数のUITouchクラスのインスタンスが格納されている。
  • マルチタッチなどの設定を行わない場合、touchesに-anyObjectを送ることでUITouchを取り出せる。
  • -locationInViewメソッドで、指定したViewのローカル座標に対応した位置座標をCGPoint構造体で抜き出す。


コメント