Jak přesunout štítek s vlnou iPhone?

hlasů
0

Níže uvedený kód je z knihy zahájení iPhone rozvoje 3 , kapitola 15, pomocí akcelerometru k ovládání míče. Chci použít štítek místo míče a pohybovat pouze ve směru x. Nicméně, já donno jak provést revizi kódu k dosažení tohoto cíle. Mohl by někdo prosím, pomozte mi? THX tolik !!!!

- (id)initWithCoder:(NSCoder *)coder {

    if (self = [super initWithCoder:coder]) {
        self.image = [UIImage imageNamed:@ball.png];
        self.currentPoint = CGPointMake((self.bounds.size.width / 2.0f) +
                                        (image.size.width / 2.0f), 
                                        (self.bounds.size.height / 2.0f) + (image.size.height / 2.0f));

        ballXVelocity = 0.0f;
        ballYVelocity = 0.0f;
    }
    return self;
}


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


- (void)drawRect:(CGRect)rect {
    // Drawing code
    [image drawAtPoint:currentPoint];
}


- (void)dealloc {
    [image release];
    [acceleration release];

    [super dealloc];
}

//#pragma mark -
- (CGPoint)currentPoint {

    return currentPoint;
}
- (void)setCurrentPoint:(CGPoint)newPoint {
    previousPoint = currentPoint;
    currentPoint = newPoint;

    if (currentPoint.x < 0) {
        currentPoint.x = 0;
        //ballXVelocity = 0;
        ballXVelocity = - (ballXVelocity / 2.0);
    }
    if (currentPoint.y < 0){
        currentPoint.y = 0;
        //ballYVelocity = 0;
        ballYVelocity = - (ballYVelocity / 2.0);
    } 
    if (currentPoint.x > self.bounds.size.width - image.size.width) {
        currentPoint.x = self.bounds.size.width  - image.size.width; 
         //ballXVelocity = 0;
        ballXVelocity = - (ballXVelocity / 2.0);
    }
    if (currentPoint.y > self.bounds.size.height - image.size.height) {
        currentPoint.y = self.bounds.size.height - image.size.height;
        //ballYVelocity = 0;
        ballYVelocity = - (ballYVelocity / 2.0);
    }

    CGRect currentImageRect = CGRectMake(currentPoint.x, currentPoint.y, 
                                         currentPoint.x + image.size.width, 
                                         currentPoint.y + image.size.height);
    CGRect previousImageRect = CGRectMake(previousPoint.x, previousPoint.y,
                                          previousPoint.x + image.size.width,  
                                          currentPoint.y + image.size.width);
    [self setNeedsDisplayInRect:CGRectUnion(currentImageRect,
                                            previousImageRect)];

}

- (void)draw {
    static NSDate *lastDrawTime;

    if (lastDrawTime != nil) {
        NSTimeInterval secondsSinceLastDraw =
        -([lastDrawTime timeIntervalSinceNow]);

        ballYVelocity = ballYVelocity + -(acceleration.y *
                                          secondsSinceLastDraw);
        ballXVelocity = ballXVelocity + acceleration.x *
        secondsSinceLastDraw;

        CGFloat xAcceleration = secondsSinceLastDraw * ballXVelocity * 500;
        CGFloat yAcceleration = secondsSinceLastDraw * ballYVelocity * 500;

        self.currentPoint = CGPointMake(self.currentPoint.x + xAcceleration,
                                        self.currentPoint.y +yAcceleration);
    }
    // Update last time with current time
    [lastDrawTime release];
    lastDrawTime = [[NSDate alloc] init];

}
Položena 30/04/2010 v 17:25
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Chcete-li začít, můžete vytvořit štítek jako vlastnost regulátoru. Používáte-li IB pak z něj činí IBOutlet a připojit jej. Pak v kódu výše, kde se používá kulový obraz, nahradit nálepku. Samozřejmě, že nemáte k tomu označení, že se postará, aby sám o sobě.

Logika pohyb je přesně stejná s výjimkou přesunu středu nebo původ štítku namísto kreslení míč v obdélníku.

Upravit

Děkuji! Ale já ne zcela pochopili, jak se pohybovat na střed štítku?

Takhle:

self.myLabel.center=CGPointMake(newX,newY);

Můžete také animovat změnu tak, aby štítek se zdá pohybovat hladce. Viz UIView třídy dokumenty pro metody.

Odpovězeno 30/04/2010 v 21:28
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more