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構造体で抜き出す。
コメント