Добавить кнопку в UIView на повернутой точке - PullRequest
1 голос
/ 01 октября 2009

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

Вот код в моем файле UIView

- (void)drawRect:(CGRect)rect {
    // Drawing code
    NSLog(@"drawRect, %i, %i", firstTouch.x, firstTouch.y);
    [tagButton drawRect:CGRectMake(firstTouch.x, firstTouch.y, 100, 200)];
    [self addSubview:tagButton];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    firstTouch = [touch locationInView:self];

    [self setNeedsDisplay];
}

это журнал от firstTouch

2009-10-01 17: 27: 23.743 текст [2521: 207] drawRect, 0, 1080311808

Как получить точку касания по осям x, y и создать на этой точке uibutton?

любая помощь будет оценена, спасибо


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

UIButton *newButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [newButton setFrame:CGRectMake(self.firstTouch.x, self.firstTouch.y, width, 17)];
        [newButton setTitle:[textField text] forState:UIControlStateNormal];
        [newButton setFont:[UIFont boldSystemFontOfSize:12]];
        [newButton setShowsTouchWhenHighlighted:YES];
        [newButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [newButton setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
        [newButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
        [newButton setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
        [newButton setBackgroundColor:[UIColor clearColor]];

        UIImage *bgImg = [[UIImage imageNamed:@"button_greyblue.png"] stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];
        [newButton setBackgroundImage:bgImg forState:UIControlStateNormal];


        [self setTagButton:newButton];
        [self.view addSubview:tagButton];
        [newButton release];

Ответы [ 2 ]

0 голосов
/ 01 октября 2009

Не думаю, что вы хотите напрямую вызывать drawRect. Прикасаясь, начинайте захватывать ваше touchLocation, как вы тогда, пока еще в касаниях, начинайте обновлять рамку вашего тега кнопки. Существует пример приложения под названием MoveMe , которое Apple предоставляет, которое довольно просто и помогает проиллюстрировать это.

Кроме того, эти точки выражаются как числа с плавающей точкой, а не как целые, поэтому используйте% f вместо% i


, чтобы ответить на вашу новую «проблему»: вы, кажется, переиздания newButton. Помните правила ... если вы получаете объект по alloc, new или copy, то вам нужно его освободить. Если нет, то нет. Таким образом, ваше приложение падает, потому что вы слишком отпускаете эту кнопку. удалить [выпуск NewButton] и все должно быть в порядке ...

0 голосов
/ 01 октября 2009

Вы получаете эти значения, потому что вы используете% i.

Значения firstTouch.x и .y на самом деле плавающие, поэтому вы должны использовать% f в NSLog.

Для добавления кнопки вам придется каждый раз выделять новую кнопку (эксперты, поправьте меня, если я ошибаюсь).

Кроме этого, остальная часть вашего кода выглядит достаточно хорошо, чтобы добавить кнопку в точке касания.

О, да, вы можете получить firstTouch.x и firstTouch.y в самом методе touchBegan и сразу же добавить кнопку.

...