【问题标题】:how change the alpha value of half of UIImage or UIImageView如何改变 UIImage 或 UIImageView 一半的 alpha 值
【发布时间】:2011-07-10 21:33:03
【问题描述】:

我正在尝试创建一个动画效果,其中 alpha 值为 0.5(大约)的图像在开始时逐渐变为 1,但与传统效果不同。这就是我要找的东西。

原图。

一段时间后

过了一段时间

最后

所以基本上如果图像的一部分的 alpha 值可以减少,我就可以显示填充玻璃或靠近它的东西的动画。
我不知道这是否可以完成,或者是否可以通过核心图形或核心动画来完成。

附:它们是在 Photoshop 中制作的。
有没有人对实现这种动画应该做些什么有任何想法?

【问题讨论】:

    标签: iphone objective-c core-animation uiimage alpha


    【解决方案1】:

    我建议如下:

    1. 创建在视图中显示图像的 UIImageView。
    2. 创建一个具有背景颜色和透明度的新 UIView:

      UIView *transpView = [UIView new];
      tranpsView.alpha = 0.4;
      transpView.frame = self.view.frame;
      [self.view addSubview:transpView];
      
    3. 动画透明视图向上滑动:

      [UIView animateWithDuration:1.0 animations:^{
          transpView.frame = CGRectOffset(transpView.frame, 0, -tranpsView.frame.size.height);
      }];
      

    完成后不要忘记释放tranpsView。可能使用completed 块。

    要获得“玻璃填充”类型的动画,只需相应地更改 tranpsViewframe 即可。 tranpsView 可以是任何 UIView 子类(如液体纹理或其他东西)。

    希望对您有所帮助!

    【讨论】:

    • 感谢@badcat,这不是我想要的,但总比没有好。
    【解决方案2】:

    您可以在上方添加视图并更改其框架。最好的办法。

    如果你使用的是图片,那么 sunclass UIView 并实现

    -(void) drawRect:(CGRect) rect {
    //if you want to clip the image, the frame for the view must be smaller then rect 
        [image drawInRect: rect];
    }
    

    【讨论】:

    • 但我使用的是图像(例如人、牛、山羊或其他任何东西,而不是简单的填充矩形)。
    【解决方案3】:

    这是另一个想法。

    UIView *view 的背景设置为您想要的image.png,alpha = 0.5。让

    w = view.bounds.size.width;
    h = view.bounds.size.height;
    

    创建另一个UIView *glassView alpha = 0.5,并将其添加为子视图:

    [view addSubview:glassView];
    glassView.frame = CGRectMake(0.0, h, w, 0.0); 
    

    创建一个UIImageView *glassImageView并将其image也设置为image.png,并将其添加为glassView的子视图:

    [glassView addSubview:glassImageView];
    glassImageView.frame = CGRectMake(0.0, -h, w, h); 
    

    现在设置动画以增加glassView 的高度和alpha,同时保持imageGlassView 的大小,如下所示:

    [UIView beginAnimations:nil context:NULL]; {
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        [UIView setAnimationDuration:1.0];
            [UIView setAnimationDelegate:self];
            glassView.alpha = 1.0;
            glassView.frame = CGRectMake(0.0, 0.0, w, h); 
            glassImageView.frame = CGRectMake(0.0, 0.0, w, h);
    } [UIView commitAnimations];        
    

    公平地说,我还没有对此进行测试,但这些方面的一些东西似乎可行。再说一次,也许不是。如果您找到了完美的解决方案,请回帖。我很想知道如何做到这一点!

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      好吧,我知道这个问题已经很老了,我是提出这个问题的人,但今天我正在尝试类似的东西,并找到了这个简单的解决方案来解决我自己 10 个月前提出的问题。

      我正在做一个项目,该项目需要一个图像看起来像是从 0% 进度的完全白色加载到 100% 进度的完全红色图像。

      我想添加 2 个包含图像的图像视图,并将包含红色图像的顶部图像视图的内容模式设置为底部,这样当您减小图像视图的大小时,图像似乎正在加载并且它工作。对于一些动画块,图像似乎正在加载。然后我想到了我问了这么久的这个问题,然后想出了解决我自己问题的方法。

      所以这个问题的解决方案是,如果你在彼此的顶部添加2个imageView,然后将后面的alpha值减小一个并将高度降低为零,然后逐渐增加高度并改变y坐标具有 alpha 值 1 的图像视图,然后它似乎正在加载,如本问题中所要求的那样。

      我已经使用这两个函数来获得加载图像的错觉。

      - (void)startAnimation
      {
          CGRect rect = loadedImageView.frame;
          rect.origin.y = unloadedImageView.frame.origin.y;
          rect.size.height = unloadedImageView.frame.size.height;
          [UIView beginAnimations:nil context:nil];
          [UIView setAnimationDelegate:self];
          [UIView setAnimationDuration:2.0f];
          [UIView setAnimationDidStopSelector:@selector(stopAnimation)];
          loadedImageView.frame = rect;
          [UIView commitAnimations];
      }
      
      - (void)stopAnimation
      {
          CGRect rect = loadedImageView.frame;
          rect.origin.y = unloadedImageView.frame.size.height + unloadedImageView.frame.origin.y;
          rect.size.height = 0;
          [UIView beginAnimations:nil context:nil];
          [UIView setAnimationDelegate:self];
          [UIView setAnimationDuration:2.0f];
          [UIView setAnimationDidStopSelector:@selector(startAnimation)];
          loadedImageView.frame = rect;
          [UIView commitAnimations];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多