0

これまでのところ、Core Animation にこのようなコードがあり、アニメーション化する場所のパラメーターが最初に設定されているのを見たことがあります。

- (void) startTopLeftImageViewAnimation{
/* Start from top left corner */ 
[self.xcodeImageView1 setFrame:CGRectMake(0.0f,0.0f, 100.0f, 100.0f)];
[self.xcodeImageView1 setAlpha:1.0f];
[UIView beginAnimations:@"xcodeImageView1Animation" context:(__bridge void *)self.xcodeImageView1];
/* 3 seconds animation */
[UIView setAnimationDuration:3.0f];
/* Receive animation delegates */ [UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector: @selector(imageViewDidStop:finished:context:)];
/* End at the bottom right corner */ [self.xcodeImageView1 setFrame:CGRectMake(220.0f,
350.0f, 100.0f,
[self.xcodeImageView1 setAlpha:0.0f];
[UIView commitAnimations]; 
}

ただし、グラフィックがマウス カーソルに追従するアニメーションを作成したいと考えています。これは、アニメーションが常にマウス ポインターの xy 値を受け取っていることを意味します。

このような「手動」アニメーションを実行し、マウスの位置を移動するたびに drawRect を呼び出すより良い方法はありますか? これに Core Animation を使用できますか?

- (void)drawRect:(NSRect)rect
{
    // Drawing code here.
    [[NSColor whiteColor] set];
    NSRectFill( rect );

    [self drawCircleAtPoint:_circlePt];
}

- (void) drawCircleAtPoint:(CGPoint) point {

    NSBezierPath* thePath = [NSBezierPath bezierPath];
    NSRect nrect = NSMakeRect(point.x, point.y, 50, 50);
    [thePath appendBezierPathWithOvalInRect:nrect];
    [[NSColor blackColor] set];
    [thePath stroke];
}

これに関して助けてくれてありがとう。

4

1 に答える 1

0

まず、マウスカーソルが指しているポイントが必要です。このために実装する必要があるメソッドは

- (void)mouseMoved:(NSEvent *)theEvent

NSEventと呼ばれるメソッドがあります

- (NSPoint)locationInWindow

これにより、ご想像のとおり、ウィンドウ内のカーソルの位置がわかります。

次に、ビュー内の場所を見つける必要があります。これはNSViewメソッドによって行われます

- (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView

ポイントがどこから来てlocationInWindow、ビューはアニメーションを実行したいビューです

例えば

CGPoint mousePoint = [[[self window] contentView] convertPoint:[theEvent locationInWindow] fromView:self];

次に、ビュー フレームを介して位置を設定するか、ビュー レイヤーの位置プロパティを使用できます。

于 2013-04-18T08:17:43.630 に答える