UIView alpha值问题

时间:2014-09-13 11:12:05

标签: ios objective-c uiview

我有一个小方法,我打电话来随着游戏的进行逐渐绘制星星。这是代码:`

-(void)stars{
    for (int i = 0; i < (ScoreNumber * 3); i++){
        int starX = ((arc4random() % (320 - 0 + 1)) + 0);
        int starY = ((arc4random() % (640 - 0 + 1)) + 0);
        int starSize = ((arc4random() % (1 - 0 + 1)) + 1);
        UIView *stars = [[UIView alloc] initWithFrame:CGRectMake(starX,starY, starSize, starSize)];
        stars.alpha = (i / 5);
        stars.backgroundColor = [UIColor whiteColor];
        [self.view addSubview:stars];
    }
    }

星星确实显示但是每次迭代都会循环显示另一个UIImageView(主角)并重置它的位置。此外,alpha值似乎根本不起作用,它似乎只使用值1(完整显示)。任何建议(对于新的程序员)都将不胜感激。

2 个答案:

答案 0 :(得分:1)

在这种情况下,i是一个整数,因此结果将始终四舍五入到最接近的整数。 0而我&lt; 5.否则为1,2,3等。相反,您可能需要:

stars.alpha = (CGFloat)i / 5.0;

虽然在i> = 5之后alpha仍然是1.0或更高。

也许你的意思是:

stars.alpha = 0.20 + (CGFloat)((i % 5) / 5.0;

这将使你的星星alpha值介于0.2和1.0之间。

答案 1 :(得分:0)

问题是只有前5颗星的alpha值小于1:

-(void)stars{
    for (int i = 0; i < (ScoreNumber * 3); i++){
        int starX = ((arc4random() % (320 - 0 + 1)) + 0);
        int starY = ((arc4random() % (640 - 0 + 1)) + 0);
        int starSize = ((arc4random() % (1 - 0 + 1)) + 1);
        UIView *stars = [[UIView alloc] initWithFrame:CGRectMake(starX,starY, starSize, starSize)];
        stars.alpha = (i / 5); // ONCE THIS IS 5 (LIKELY WON'T TAKE LONG), ALPHA WILL BE 1 FOR ALL YOUR STARS
        stars.backgroundColor = [UIColor whiteColor];
        [self.view addSubview:stars];
    }
}

此外,如果星星被添加到当前星星顶部的超级视图中并且其alpha实际上小于1,则它看起来会比实际上具有更多的alpha值。

一个修正可能是将5改为更大的东西,比如25或50.如果不知道ScoreNumber有多大,很难知道什么是合适的。

修改

另外,刚刚意识到另一个问题:你将int除以int,所以alpha将是一个int(不是你想要的)。如果你将5改为5.0(或25.0或50.0),你将获得一个浮动。

希望它有所帮助!