массив байтов hardcode в C

Одной из проблем с кодом выше Анны Карениной является то, что она не работает, когда вы добавляете аннотации ниже, куда пользователь смотрит в данный момент. Эти аннотации будут плавать в воздухе перед падением, потому что они перемещаются в видимый прямоугольник карты пользователя.

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

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    MKAnnotationView *aV; 

    for (aV in views) {

        // Don't pin drop if annotation is user location
        if ([aV.annotation isKindOfClass:[MKUserLocation class]]) {
            continue;
        }

        // Check if current annotation is inside visible map rect, else go to next one
        MKMapPoint point =  MKMapPointForCoordinate(aV.annotation.coordinate);
        if (!MKMapRectContainsPoint(self.mapView.visibleMapRect, point)) {
            continue;
        }

        CGRect endFrame = aV.frame;

        // Move annotation out of view
        aV.frame = CGRectMake(aV.frame.origin.x, aV.frame.origin.y - self.view.frame.size.height, aV.frame.size.width, aV.frame.size.height);

        // Animate drop
        [UIView animateWithDuration:0.5 delay:0.04*[views indexOfObject:aV] options: UIViewAnimationOptionCurveLinear animations:^{

            aV.frame = endFrame;

        // Animate squash
        }completion:^(BOOL finished){
            if (finished) {
                [UIView animateWithDuration:0.05 animations:^{
                    aV.transform = CGAffineTransformMakeScale(1.0, 0.8);

                }completion:^(BOOL finished){
                    if (finished) {
                        [UIView animateWithDuration:0.1 animations:^{
                            aV.transform = CGAffineTransformIdentity;
                        }];
                    }
                }];
            }
        }];
    }
}
22
задан medimatrix 13 May 2014 в 18:27
поделиться

5 ответов

Вы можете сделать то же самое в C, но вы должны объявить его типа char [] , а не char * , чтобы вы могли получить его размер с помощью оператора sizeof :

char myArray[] = { 0x00, 0x11, 0x22 };
size_t myArraySize = sizeof(myArray);  // myArraySize = 3
44
ответ дан 29 November 2019 в 03:55
поделиться

Попробуйте:

char myArray[] = { 0x00, 0x11, 0x22 };
5
ответ дан 29 November 2019 в 03:55
поделиться

Для полноты картины в C99 вы также можете использовать составные литералы:


    char *myArray = (char []) {0x00, 0x11, 0x22 };

Если требуется совместимость исходного кода с C ++, вам лучше не использовать эту конструкцию, потому что она is - afaik - не является частью стандарта C ++.

5
ответ дан 29 November 2019 в 03:55
поделиться

Не работает

char myArray[] = {0x00, 0x01,0x02};

?

2
ответ дан 29 November 2019 в 03:55
поделиться
2
ответ дан 29 November 2019 в 03:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: