рд╕реБрдкреНрд░рднрд╛рдд / рджрд┐рди / рд╢рд╛рдо / рд░рд╛рдд% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%!
рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
рдХрд┐рд╕реА рдЕрдиреНрдп
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдПрдХ рдкреНрд░рднрд╛рд╡реА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреА рдХрдореА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ)ред рддреЛ рдЖрдк рдпрд╣ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ UIAlertView рд╡рд░реНрдЧ рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рдФрд░ рдЙрдмрд╛рдК рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛,
рдЕрдкрдиреЗ рдХреИрд╕реАрдиреЛ рдХреЛ рд▓рд╛рдареА ... рдЖрдкрдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХрдХреНрд╖рд╛ рдХреЗ
рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдорд╛рдирджрдВрдб "рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛" рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рд╡рд┐рдзрд┐ рдорд┐рд▓реА:
+ (void) showMessage:(NSString *)message;
рдХрд╛рд░реНрдп "рдмрд╣реБрдд рд╕рд░рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪрдирд╛" рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
- рдпреВрдмрд┐рд▓рдм - 1 рдкреАрд╕реАред
- UIView - 2 рдкреАрд╕реАред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ UILabel рдФрд░ "рджрд░реНрдЬреА" рд▓реЗрдВрдЧреЗ:
UILabel *messageLabel = [[UILabel alloc] init]; messageLabel.textAlignment = UITextAlignmentCenter; messageLabel.numberOfLines = 0; messageLabel.lineBreakMode = UILineBreakModeWordWrap; messageLabel.text = message; messageLabel.font = [UIFont fontWithName:@тАЭHelvetica-BoldтАЭ size:15.0f]; messageLabel.textColor = [UIColor whiteColor]; messageLabel.backgroundColor = [UIColor clearColor];
рдлрд┐рд░ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - "рдФрд░ рд╣рдорд╛рд░рд╛ рд╕рдВрджреЗрд╢ рд╕реНрдХреНрд░реАрди рдкрд░ рдХрд┐рддрдирд╛ рд╕реНрдерд╛рди рд▓реЗрдЧрд╛?"
CGSize messageSize = [message sizeWithFont:messageLabel.font constrainedToSize:CGSizeMake(160.0f, 9999.0f) lineBreakMode:UILineBreakModeWordWrap];
NSString sizeWithFont рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐: (UIFont *) рдлреЙрдиреНрдЯ рдиреЗ рд╡рд┐рд╡рд╢ рдХрд┐рдпрд╛ TTSize (CGSize) рд╕рд╛рдЗрдЬ line
- рдмрд╣реБ
- рдмреНрд▓реЙрдХ рдХреА рдЪреМрдбрд╝рд╛рдИ 160.0f рд╣реИ (рдпрджрд┐ рд╢рдмреНрдж рдЗрд╕ рдЖрдХрд╛рд░ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ рддреЛ рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЖрдпрдд рдХреЛ рд╕реНрд╡рдпрдВ рдкреНрд░рд╛рдкреНрдд рдЖрдпрд╛рдореЛрдВ рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, 2 рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдпрд╛рдореЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП:
- рдореВрд▓ рддрддреНрд╡ рдХреА рд╕реАрдорд╛ рдХреА рдореЛрдЯрд╛рдИ (рд╣рдо рдЗрд╕рдореЗрдВ "рдЙрд▓реАрдмреЗрд▓" рдбрд╛рд▓рддреЗ рд╣реИрдВ)
- рдореВрд▓ рддрддреНрд╡ рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ
CGRect messageRect = CGRectMake(offsetSize.width + borderWidth, offsetSize.height + borderWidth, messageSize.width, messageSize.height); messageLabel.frame = messageRect;
рдпрд╣ рдЕрдм рдХреЗ рд▓рд┐рдП рд╣реИ, рд╣рдо UILabel рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд▓рд╛рдЗрди рдореЗрдВ рдЕрдЧрд▓рд╛ UILabel рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рд╣реИ - рджреЛ UIView рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ред рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ - рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ, рд╕реАрдорд╛, рд╕реАрдорд╛ рд╕реЗ рд╕рдВрдХреЗрддрдХред "рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рдХрд╛рд╢" рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд - рдЧреЛрд▓ рдХреЛрдиреЛрдВ, рдЫрд╛рдпрд╛ рдФрд░ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ред рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдХреЛрдб рд╣реИ
messageSize.width += offsetSize.width*2.0f + borderWidth; messageSize.height += offsetSize.height*2.0f + borderWidth; contentRect = CGRectMake(0.0f, 0.0f, messageSize.width, messageSize.height); UIView *content = [[UIView alloc] init]; content.frame = contentRect; content.backgroundColor = [UIColor colorWithRed:(60.0f/255.0f) green:(60.0f/255.0f) blue:(60.0f/255.0f) alpha:1.0f]; content.alpha = 0.8f; content.layer.cornerRadius = 8.0f; content.layer.shadowRadius = 8.0f; content.layer.masksToBounds = NO; content.layer.shadowOffset = CGSizeMake(0.0f, 4.0f); content.layer.shadowOpacity = 1.0f; content.layer.borderWidth = 1.0f; content.layer.borderColor = [[UIColor colorWithRed:(128.0f/255.0f) green:(128.0f/255.0f) blue:(128.0f/255.0f) alpha:1.0f] CGColor]; content.layer.shadowPath = [UIBezierPath bezierPathWithRect:contentRect].CGPath;
рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рд╢реЗрд╖ UIView - rootView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
UIView *rootView = [[UIView alloc] init]; rootView.tag = 2000; rootView.frame = contentRect; rootView.alpha = 0.0f;
рдЗрд╕ рдЪрд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣рдордиреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдФрд░ 2 рдпреВрдЖрдИрд╡реАрдИрд╡рд╛рдИ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдпреВрдЖрдИрдмреЗрд▓ рдХреЗ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЙрдирд╕реЗ рдПрдХ matryoshka рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
messageLabel.center = CGPointMake(contentRect.size.width/2.0f, contentRect.size.height/2.0f); [content addSubview:messageLabel]; [messageLabel release]; [rootView addSubview:content]; [content release]; rootView.center = [[UIApplication sharedApplication] keyWindow].center;
рдПрдиреАрдореЗрд╢рди
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдиреАрдореЗрд╢рди рдХреЛ 3 рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
- рджрд┐рдЦрд╛рд╡рдЯ
- рдЙрдЫрд╛рд▓ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЕрдиреБрдХрд░рдг
- рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдиреЗ
1.1 рд╕реЗ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде 0.8 рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдХрд╛рд░ рд╕реЗ рд░реВрдЯ рд╡реНрдпреВ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд╕рд░рд▓ рдПрдиреАрдореЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрдЫрд╛рд▓ рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рддреБрд░рдВрдд рдЗрд╕рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЖрдХрд╛рд░ рдореЗрдВ рдХрдореА рдЖрдИ рдереА - 1.0 рдХрд╛ рдЧреБрдгрд╛рдВрдХред рдкреНрд░рдХрдЯрди рдФрд░ рдЧрд╛рдпрдм рд╣реЛрдирд╛ - rootView.alpha рдХреЛ 0.0f рд╕реЗ 1.0f рдореЗрдВ рдмрджрд▓ рджреЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХрд╛ рдЖрдХрд╛рд░ 1.2 рдХреЗ рдПрдХ рдХрд╛рд░рдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рднреА рд╣реИред рдЙрдЫрд╛рд▓ рдкреНрд░рднрд╛рд╡ рдХреЗ "рд╢рд┐рдЦрд░" рдмрд┐рдВрджреБ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рдЙрдкрд▓рдмреНрдзрд┐ рдХреЗ рд▓рд┐рдП (рдЕрд░реНрдерд╛рддреН, рдЬрдм рдЧреБрдгрд╛рдВрдХ 1.2 рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИ), рдпрд╣ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдпреЛрдЬрд┐рдд рдХреБрд▓ рд╕рдордп рдХреЗ 2/3 рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмрд╛рдХреА рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рджрд░реНрд╢рди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрджреЗрд╢ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╕рдВрджреЗрд╢ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
IOS рд╕рдВрд╕реНрдХрд░рдг 4.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдПрдиреАрдореЗрд╢рди рдмреНрд▓реЙрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, iOS рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг 4.0 рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИ (рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ iOS 3 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ)ред
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
UIView рдХреНрд▓рд╛рд╕ рдХреА рд╡рд┐рдзрд┐ рд╣рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:
- рдПрдиреАрдореЗрд╢рди рдХреА рдЕрд╡рдзрд┐
- рдПрдиреАрдореЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдХреА рдЕрд╡рдзрд┐ рдХреЛ рд░реЛрдХреЗрдВ
- рдПрдиреАрдореЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕
- рд╕реАрдзреЗ рдПрдиреАрдореЗрд╢рди
- рдФрд░ рдХреЛрдб рдЬрд┐рд╕реЗ рдПрдиреАрдореЗрд╢рди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдПрдиреАрдореЗрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
rootView.transform = CGAffineTransformMakeScale(0.8f, 0.8f); [[[UIApplication sharedApplication] keyWindow] addSubview:rootView]; [UIView animateWithDuration:0.35*0.66 delay:0.0 options:UIViewAnimationCurveEaseOut animations:^ { rootView.alpha = 0.66f; rootView.transform = CGAffineTransformMakeScale(1.1f, 1.1f); } completion:^(BOOL completed) { [UIView animateWithDuration:0.35*0.33 delay:0.0 options:UIViewAnimationCurveLinear animations:^{ rootView.alpha = 1.0f; rootView.transform = CGAffineTransformIdentity; } completion:^(BOOL completed) { [UIView animateWithDuration:0.35 delay:0.9 options:UIViewAnimationCurveEaseIn animations:^{ rootView.alpha = 0.0f; rootView.transform = CGAffineTransformMakeScale(1.2f, 1.2f); } completion:^(BOOL completed) { [rootView removeFromSuperview]; [rootView release]; }]; }]; }];
рдкрд░рд┐рдгрд╛рдо
рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ "рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ" рдорд┐рд▓рд╛, рдЬрд┐рд╕реЗ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
[FHNotification showMessage:@тАЭVery simple inApp-notificationтАЭ];

рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ:
- рдмрд╣реБрдд, рдмрд╣реБрдд рдЖрд╕рд╛рди рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╡рд┐рдкрдХреНрд╖:
рдХреЗрд╡рд▓ iOS 4.0+ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ- рдХреЗрд╡рд▓ рдкрд╛рда рдЪреЗрддрд╛рд╡рдиреА рдХреА рдХреНрд╖рдорддрд╛
рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП QuartzCore.framework рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ
рдЬреАрдердм рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдереЛрдбрд╝рд╛ рдкреВрд░рдХ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд
рд╡рд╣ рд╕рдм рд╣реИред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред