#iphone #uiview #touch #uiviewanimation
#iPhone #пользовательский интерфейс #коснитесь #uiviewanimation
Вопрос:
На данный момент я в тупике, я хочу активировать анимацию UIView при нажатии пальцем, создав UIView вокруг того места, где находится палец. Возможно ли это?
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
CGPoint pos = [touch locationInView: [UIApplication sharedApplication].keyWindow];
NSLog(@"Position of touch: %.3f, %.3f", pos.x, pos.y);
//CGRect touchFrame = CGRectMake(pos.x, pos.y, 100, 100);
UIView *box = [[UIView alloc] initWithFrame:CGRectMake(pos.x, pos.y, 100, 100)];
NSLog(@"%f", box.frame.origin.x);
[self.view addSubview:box];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:110 forView:box cache:NO];
[UIView commitAnimations];
[box removeFromSuperview];
[box release];
}
Любые предложения более чем приветствуются.
Комментарии:
1. Это возможно, но в чем именно ваша проблема?
2. Ой, извините! Здесь я немного устал. Когда это выполняется, к области set box не применяется влияние.
3. это должно быть исправлено путем установки границ представления, а не его рамки, как вы делаете. смотрите мой ответ ниже.
Ответ №1:
Это из-за того, что вы написали следующую строку
[box removeFromSuperview];
[box release];
Эту строку вы должны вызвать после завершения анимации изображения коробки.
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch * touch = [touches anyObject];
CGPoint pos = [touch locationInView: [UIApplication sharedApplication].keyWindow];
UIView *box = [[UIView alloc] initWithFrame:CGRectMake(pos.x, pos.y, 100, 100)];
[self.view addSubview:box];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:110 forView:box cache:NO];
[UIView commitAnimations];
[self performSelector:@selector(releaseBoxImge:) withObject:box afterDelay:1.0];
}
-(void)releaseBoxImge:(UIView *)boxImage
{
[boxImage removeFromSuperview];
[boxImage release];
}
Комментарии:
1. Это не помогло, хотя я понимаю, к чему вы клоните. Разве это не должно быть [[self box] removeFromSuperview]? Поскольку оно создано и размещено в touchesBegan. Если я просто выделю / инициализирую это в файле заголовка, могу ли я просто сделать что-то вроде box.frame = CGRectMake(поз.x, поз.y, 100, 100); ?
2. извините, я забыл передать изображение вашего ящика методу выбора. Отредактированный выше код теперь определенно будет работать.
3. Это не создает анимацию в UIView.
Ответ №2:
Как сказал RRB, сделайте removeFromSuperView
после завершения анимации (я не уверен, что его код сделает это). Я думаю, это должно выглядеть так:
//initializations of everything here ..
[UIView animateWithDuration:1.0
animations:^
{
//do animations here
}
completion:^(BOOL finished)
{
//do clean up here
}];