Цель C - Если заявление о CGRectmake? - PullRequest
0 голосов
/ 08 июля 2011

вот что я пытаюсь сделать здесь.Я хочу, чтобы изображение начиналось с верхней части экрана и доходило до нижней части, затем, когда оно попадает в нижнюю часть, оно снова возвращается вверх.Я могу заставить изображение исчезнуть, выполнив это

- (void)viewDidLoad {
[super viewDidLoad];


[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:4.0];
[image setFrame:CGRectMake(0, 0, 30, 1500)];
[UIView commitAnimations];


if ([image setFrame:CGPoint =(0, 0, 30, 1500)]) {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:4.0];
    [image setFrame:CGRectMake(0, 0, 30, 0)];
    [UIView commitAnimations];
}
}

Это если утверждение не работает, я не уверен, как заставить это работать.Я очень новичок в использовании очков.

Или, может быть, цикл while?Есть идеи?Большое спасибо!

Хорошего дня

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Эта строка немного запутана:

if ([image setFrame:CGPoint =(0, 0, 30, 1500)]) {

Функция -[NSView setFrame] устанавливает фрейм представления.Его нельзя использовать для проверки текущего кадра - для этого вы должны использовать что-то вроде:

if (CGRectEqualToRect([image frame], CGRectMake(0, 0, 30, 1500))) {

, который использует функцию -[NSView frame] для получения текущего кадра, и CGRectEqualToRectсравнить это.

0 голосов
/ 08 июля 2011

Этот код не будет запускаться для начала, потому что эта строка недопустима

if ([image setFrame:CGPoint =(0, 0, 30, 1500)]) {

Я полагаю, вы хотели сравнить расположение представления

if (CGPointEqualToPoint(image.frame.origin, CGPointMake(0, 0))) {

Ширина вашего изображениятакже установлен на 1500 в местах, которые кажутся не совсем правильными

Последняя причина, по которой это не сработает, заключается в том, что UIView будет смотреть на чистые изменения местоположения и понимать, что представление не перемещается, поэтому он выигралничего не делать.

То, что вам нужно сделать, это, возможно, использовать блоки вроде этого

float duration = 0.5;
int delay = 0;

[UIView animateWithDuration:duration
                      delay:delay
                    options:UIViewAnimationCurveLinear
                 animations: ^{
                     image.frame = CGRectMake(0, 460, 30, 30);
                 } completion:^(BOOL finished) {

                     [UIView animateWithDuration:duration
                                           delay:delay
                                         options:UIViewAnimationCurveLinear
                                      animations: ^{
                                          image.frame = CGRectMake(0, 0, 30, 30);
                                      } completion:nil];
                 }];
...