0
画面上に円を表示して消えるようにするアプリを作ってみたい。サークルはTouchesBeganで拡大され、touchesEndでは小さくなります。 私は1つのサークルでそれを行うことができますが、私はどこでもユーザが画面に触れることを望みます。 私はNSThreadsで作業する必要があることを知っていますが、私の例はうまくいきません。NSThreadsとNSTimerを組み合わせてビューを更新する
これは私のコードの一部です:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
lastPoint = [touch locationInView:self.view];
zoomIn = TRUE;
rayonCercle = 25;
//Creation d'un thread
timerThread = [[NSThread alloc] initWithTarget:self selector:@selector(cycle) object:nil];
[timerThread start];
if ([touch tapCount] == 1) {
NSLog(@"une touche");
}
if ([touch tapCount] == 2) {
drawImage.image = nil;
return;
}
}
- (void) cycle {
NSLog(@"cycle");
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSRunLoop* runLoop = [NSRunLoop currentRunLoop];
time = [NSTimer scheduledTimerWithTimeInterval: 0.1
target: self
selector: @selector(drawCircle:)
userInfo: nil
repeats: YES];
[runLoop run];
[pool release];
}
- (void) drawCircle:(NSTimer *)timer {
NSLog(@"drawCircle");
UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGGradientRef myGradient;
CGColorSpaceRef myColorSpace;
size_t locationCount = 3;
CGFloat locationList[] = {0.0, 0.5, 1.0};
CGFloat colorList[] = {
1.0, 0.0, 0.5, 1.0, //red, green, blue, alpha
1.0, 0.0, 1.0, 1.0,
0.3, 0.5, 1.0, 1.0
};
myColorSpace = CGColorSpaceCreateDeviceRGB();
myGradient = CGGradientCreateWithColorComponents(myColorSpace, colorList,
locationList, locationCount);
CGContextDrawRadialGradient(UIGraphicsGetCurrentContext(), myGradient, lastPoint, 0, lastPoint,rayonCercle, 0);
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (rayonCercle < 200 && zoomIn == TRUE) {
_hue += 0.5;
_brightness += 0.005;
_saturation += 0.05;
rayonCercle += 15;
}
if (zoomIn == FALSE) {
if (rayonCercle < 0) {
[time invalidate];
[timerThread release];
} else {
_hue -= 0.5;
_brightness -= 0.005;
_saturation -= 0.05;
rayonCercle -= 1;
}
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
lastPoint = currentPoint;
_hue = 0.0;
_saturation = 0.0;
_brightness = 0.0;
rayonCercle = 25;
zoomIn = TRUE;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
_hue = 0.0;
_saturation = 0.0;
_brightness = 0.0;
zoomIn = FALSE;
UITouch *touch = [touches anyObject];
if ([touch tapCount] == 2) {
drawImage.image = nil;
return;
}
}
しかし、他のスレッドがなければ、同時にいくつかの円を小さくすることは可能でしょうか? – mickcoco
時間の経過とともにイベントシーケンスを管理します。 drawRectが呼び出されると、描画呼び出しの時間(例えば、現在の時間)から描画するものの基になります。イベントの種類、時間、タッチ位置などを追跡する必要があります。この情報を使用すると、描画する内容、描画するサイズ、イベントが発生した時間(たとえば、フェードアウトしたい場合など)を知ることができます。助けてください – justin
申し訳ありません私はそれを動作させることができません:(私は(タイマーで)表示するすべての形状を持つ配列を構築しようとし、別のタイマーで、私はすべての形状を描くために私の配列を参照しますが、仕事... – mickcoco