I think I've found a minor bug. I have several UISprites that change position and drop in and out of active state regularly. In some cases, a sprite may be hidden and shown (set inactive and then active) in the same frame (same update code block, no chance of this being across 2 frames). When this happens, the sprite 'blinks'. I think what is happening is that NGUI is registering the inactive state, and updates the sprite as invisible, but does not realize it has been reactivated in the same frame. Then in the next frame NGUI sees it is visible and updates the mesh to show it.
This results in a very noticeable single frame where the sprite is invisible but should be visible, creating a 'blink' effect.
I got around this by adding a method to UISprite:
public void setDirty()
{
mChanged = true;
}
and calling this after I show the sprites. This forces the rebuild in the same frame.
I haven't investigated deeply, but my guess would be that you are comparing a stored boolean somewhere against the active state of the UISprite game object, and so it takes two frames to register two changes. That's just my wild guess though.
EDIT: Update - It seems that setting mChanged to true does not fix this problem. I think it was just a case that I did not see the blinks the last few times I tried, but I have seen them occur since I made this post. So I'm open to suggestions on fixing this.