Quote:
Originally Posted by duvdev
Hello,
i have a button and I load an image to it.
I want the when the user press this button a green frame will appear for a 1 sec and then disappear and then I load a new picture to that button.
I worte:
button.layer.borderWidth = 3;
button.layer.borderColor = [UIColor greenColor].CGColor;
sleep (1) ;
button.layer.borderWidth = 0; // disappear of the border
call function to load new image to button.
The problem is that the green frame don't show up. if it delete the
button.layer.borderWidth = 0; // disappear of the border
I saw the the frame will show only after I load the new image and I dont want this to be like that.
Any one know y and how to solve it?
Thanksm Shlomi
|
The problem you are facing is that UI changes don't take place until your code returns and the program revisits the event loop.
sleep() causes your program to freeze, and do nothing at all, for the specified time. At this point, forget about sleep. It's bad news. Don't use it.
I gather the code that you posted is in your button's IBAction method?
It sounds like what you're trying to do is have the button trigger an animation - a border appears, then the icon changes.
You could use performSelector:withObject:afterDelay: to set up the border, then trigger another method after a delay that hides the border and changes the icon. That method queues a call to the specified selector, and returns to the event loop.
So your code might look like this:
Code:
button.layer.borderWidth = 3;
button.layer.borderColor = [UIColor greenColor].CGColor;
[self performSelector: @selector(hideBorderAndSwitchIconForButton:)
withObject: button
afterDelay: 1.0];
And then you would need to code a method hideBorderAndSwitchIconForButton:
Code:
- (void) hideBorderAndSwitchIconForButton: (UIButton*) theButton;
{
theButton.layer.borderWidth = 0; // disappear of the border
//Change the button image.
}