Ios 在平移手势或拖动时更改视图Alpha

Ios 在平移手势或拖动时更改视图Alpha,ios,objective-c,uiview,Ios,Objective C,Uiview,我想要一个UIView在平移时拖动到屏幕底部的手势,但是视图alpha在到达屏幕底部时应该缩小到“零” 反之亦然,当我向上拖动视图时,UIView alpha应缩小到“1” 但问题是,在平移半个屏幕时,视图的alpha值会缩小到“零”,有时我会将视图拖慢。 最初,我将UIView背景颜色设置为黑色 我需要逐渐缩小视图的alpha值,任何想法或建议都会有所帮助 UIPanGestureRecognizer * panner = nil; panner = [[UIPanGestureR

我想要一个UIView在平移时拖动到屏幕底部的手势,但是视图alpha在到达屏幕底部时应该缩小到“零”

反之亦然,当我向上拖动视图时,UIView alpha应缩小到“1”

但问题是,在平移半个屏幕时,视图的alpha值会缩小到“零”,有时我会将视图拖慢。
最初,我将UIView背景颜色设置为黑色

我需要逐渐缩小视图的alpha值,任何想法或建议都会有所帮助

  UIPanGestureRecognizer * panner = nil;
    panner = [[UIPanGestureRecognizer alloc] initWithTarget: self action:@selector(handlePanGesture:)];
    [self.view addGestureRecognizer:panner ];
    [panner setDelegate:self];
    [panner release];


    CGRect frame = CGRectMake(0, 0, 320, 460);
    self.dimmer = [[UIView alloc] initWithFrame:frame];
    [self.dimmer setBackgroundColor:[UIColor blackColor]];
    [self.view addSubview:dimmer];



     -(IBAction) handlePanGesture:(UIPanGestureRecognizer *) sender {

      static CGPoint lastPosition = {0}; 
      CGPoint nowPosition; float alpha = 0.0;
      float new_alpha = 0.0;

        nowPosition = [sender translationInView: [self view]];
         alpha = [dimmer alpha] -0.0037;
         dimmer.alpha -=alpha;
    }

你没有相对于你的手势进行缩放;每次执行
handlePangestre:
时,无论平移方向或距离如何,都将设置
dimmer.alpha=0.0037

-(IBAction) handlePanGesture:(UIPanGestureRecognizer *) sender {
  static CGPoint lastPosition = {0}; 
  CGPoint nowPosition;
  float alpha = 0.0;
  float new_alpha = 0.0; // Unused!!

  nowPosition = [sender translationInView: [self view]]; // Unused!!
  alpha = [dimmer alpha] - 0.0037;
  dimmer.alpha -= alpha; // === dimmer.alpha = dimmer.alpha - (dimmer.alpha - 0.0037)
                         // === dimmer.alpha = 0.0037 !!!
}
更好的实现可能如下所示:

-(IBAction) handlePanGesture:(UIPanGestureRecognizer *) sender {
  CGPoint nowPosition = [sender translationInView: [self view]];
  CGFloat alpha = dimmer.alpha - ([sender translationInView: [self view]].y)/320.0;
  dimmer.alpha = MAX(0, MIN(1, alpha));
}

你没有相对于你的手势进行缩放;每次执行
handlePangestre:
时,无论平移方向或距离如何,都将设置
dimmer.alpha=0.0037

-(IBAction) handlePanGesture:(UIPanGestureRecognizer *) sender {
  static CGPoint lastPosition = {0}; 
  CGPoint nowPosition;
  float alpha = 0.0;
  float new_alpha = 0.0; // Unused!!

  nowPosition = [sender translationInView: [self view]]; // Unused!!
  alpha = [dimmer alpha] - 0.0037;
  dimmer.alpha -= alpha; // === dimmer.alpha = dimmer.alpha - (dimmer.alpha - 0.0037)
                         // === dimmer.alpha = 0.0037 !!!
}
更好的实现可能如下所示:

-(IBAction) handlePanGesture:(UIPanGestureRecognizer *) sender {
  CGPoint nowPosition = [sender translationInView: [self view]];
  CGFloat alpha = dimmer.alpha - ([sender translationInView: [self view]].y)/320.0;
  dimmer.alpha = MAX(0, MIN(1, alpha));
}

我会在屏幕上查看您当前位于
手柄范围内的点:
在视图
CGFloat percentage=nowPosition.y/self.view.frame.size.height中查找您所处的百分比
然后将alpha设置为
dimmer.alpha=1.0-百分比。这样,无论您移动到何处,您都将alpha设置为离底部有多近。

我将查看您当前在
手柄范围内的屏幕上的点:
在视图
CGFloat percentage=nowPosition.y/self.view.frame.size.height
然后将alpha设置为
dimmer.alpha=1.0-百分比。这样,无论您移动到哪里,您都将alpha设置为离底部有多近。

请描述您的尝试有哪些无效。@IanMacDonald我已经更新了问题。请描述您的尝试有哪些无效。@IanMacDonald我已经更新了问题。
CGFloat alpha=dimmer.alpha-([sender TranslationView:[self view]].y)/320.0;dimmer.alpha=MAX(0,MIN(1,alpha));
——此代码仅在向下拖动视图时有效,但**向上拖动到alpha刻度“1.0”时如何。**这只是一个示例。这是否意味着当我将视图向上拖动时,此代码或逻辑将相同:CGFloat alpha=dimmer.alpha-([sender translationview:[self view]].y)/320.0;dimmer.alpha=MAX(0,MIN(1,alpha));来自
translationView
的结果将在一个方向上给出正数,在另一个方向上给出负数。
CGFloat alpha=dimmer.alpha-([sender translationView:[self view]].y)/320.0;dimmer.alpha=MAX(0,MIN(1,alpha));
--此代码仅在向下拖动视图时有效,但**向上拖动到alpha刻度“1.0”时如何**这只是一个示例。这是否意味着当我向上拖动视图时,此代码或逻辑将相同:CGFloat alpha=dimmer.alpha-([sender TranslationView:[self view]].y)/320.0;dimmer.alpha=MAX(0,MIN(1,alpha));来自
translationView
的结果将在一个方向上给出正数,在另一个方向上给出负数。