【问题标题】:My PanGestureRecognizer won't move when i want to resize it当我想调整它的大小时,我的 PanGestureRecognizer 不会移动
【发布时间】:2013-04-23 20:44:03
【问题描述】:

我有一个 UIPanGestureRecognizer。它工作正常。我做了一个 if 语句,所以当有人触摸图片时,它会是 alpha 0.7,并且会大 1.5 倍。 alpha 工作正常,但是当我输入 CAAffineTransformMakeScale 方法时,我的图像不会移动。

这是我的代码:

- (IBAction)Bloemen:(UIPanGestureRecognizer *)recognizer {

    CGPoint translation = [recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                     recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

     if (UIGestureRecognizerStateBegan)
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDelay:0.1];
        [UIView setAnimationDuration:0.4];

        bloemen.alpha = 0.7f;
        bloemen.transform = CGAffineTransformMakeScale(1.5,1.5);

        [UIView commitAnimations];
     }
    if (UIGestureRecognizerStateEnded) {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDelay:0.1];
        [UIView setAnimationDuration:0.1];

        bloemen.alpha = 1.0f;
        bloemen.transform = CGAffineTransformIdentity;

       [UIView commitAnimations];
   }
}

【问题讨论】:

  • 如果您使用自动布局,我可以向您展示如何动画约束的变化(因为当您重新应用约束时,移动的视图将返回到其原始位置,例如当您执行最终动画时),但除非您使用自动布局,否则不想混淆问题。上述代码 sn-p 中的关键问题在于if 子句,如下所述。

标签: ios xcode core-animation uigesturerecognizer uipangesturerecognizer


【解决方案1】:

关键问题是您的if 语句没有检查state 属性。应该是:

if (recognizer.state == UIGestureRecognizerStateBegan)
{
    // began code here
}
else if (recognizer.state == UIGestureRecognizerStateEnded)
{
    // ended code here
}

另外请注意,此手势识别器仅在您关闭自动布局时才能工作。如果您使用自动布局,则必须更改约束。


如果您原谅风格上的观察,我也可能倾向于建议:

  • 使用基于块的动画;

  • 如果不需要,不要引用非局部变量(即引用 recognizer.view 而不是 bloemen),这样可以更轻松地重用此处理程序来拖放您选择添加的各种 UIView 对象这个手势;和

  • 使用标准命名约定,方法名称以小写字母开头,并遵循verbNoun 约定。

这些都不是关键,请随意使用或忽略,但这展示了一些最佳做法:

- (void)handlePan:(UIPanGestureRecognizer *)recognizer
{    
    CGPoint translation = [recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                         recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        [UIView animateWithDuration:0.4
                              delay:0.0  // you had 0.1, but seems worthwhile to give immediate feedback
                            options:0
                         animations:^{
                             recognizer.view.alpha = 0.7f;
                             recognizer.view.transform = CGAffineTransformMakeScale(1.5,1.5);
                         }
                         completion:nil];
    }
    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        [UIView animateWithDuration:0.1
                              delay:0.0  // you had 0.1, but seems worthwhile to give immediate feedback
                            options:0
                         animations:^{
                             recognizer.view.alpha = 1.0f;
                             recognizer.view.transform = CGAffineTransformIdentity;
                         }
                         completion:nil];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-18
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多