tirer pour rafraîchir l'animation comme le courrier dans iOS6
Je suis un développeur iOS et récemment j'ai installé le nouveau iOS 6 sur les tests. Comme je suis venu à travers avec mail tirer pour rafraîchir l'animation, j'ai décidé d'essayer de l'appliquer sur mon propre. J'ai essayé d'utiliser CAShapeLayer avec UIBezierPath pour créer la même forme ovale qui peut être déplacé vers l'avant vers le bas. Et afin d'obtenir vers le bas la partie tendus vers le bas, j'ai essayé d'utiliser l'ajout de la courbe avec deux points de contrôle et appliquée CABasicAnimation. Mais malheureusement, le résultat n'est pas que je m'attendais. Depuis le étiré lignes d'obtenir un peu de forme ovale à l'intérieur. Je suppose que l'ovale de l'animation est de faire quelque chose avec d'autres classes. Je serais très reconnaissante si quelqu'un pouvait me conduire à certaines idées ici.
Merci beaucoup
- (UIBezierPath *)createCircleForRect:(CGRect)bRect
{
UIBezierPath *circle = [UIBezierPath bezierPath];
CGFloat rectWidth = bRect.size.width;
CGFloat rectHeight = bRect.size.height;
minSize = MIN(rectWidth, rectHeight);
//center = CGPointMake(minSize/2.0f, minSize/2.0f);
CGFloat radius = minSize/2.0f - 5.0f;
startPointOffset = center.x - radius;
if(startPointOffset == 5.0f)
testVal = 0;
else
testVal += startPointOffset;
NSLog(@"startPointOffset =>> %f", startPointOffset);
NSLog(@"radius =>> %f", radius);
NSLog(@"after center =>> %f, %f", center.x, center.y);
[circle addArcWithCenter:center radius:radius startAngle:DEGREES_TO_RADIANS(0) endAngle:DEGREES_TO_RADIANS(180) clockwise:NO];
[circle moveToPoint:CGPointMake(startPointOffset, center.y)];
[circle addCurveToPoint:CGPointMake(center.x + radius, center.y) controlPoint1:CGPointMake(center.x - radius, rectHeight + 10.0f) controlPoint2:CGPointMake(center.x + radius, rectHeight + 10.0f)];
[circle closePath];
return circle;
}
-(void)startAnimation
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"];
animation.duration = 1.0;
animation.repeatCount = HUGE_VALF;
animation.autoreverses = YES;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.fromValue = (id)roundBPath;
CGRect smallerRect = self.frame;
smallerRect.size.height += 50;
smallerRect.size.width -= 80;
UIBezierPath *newRound = [self createCircleForRect:smallerRect];
animation.toValue = (id)(newRound.CGPath);
[shapeLayer addAnimation:animation forKey:@"animatePath"];
}
vous pouvez avoir un coup d'oeil à github.com/xpepermint/iOS-UIPullerView et github.com/enormego/EGOTableViewPullRefresh
Merci beaucoup de l'homme :). J'ai vérifié les sources avant et j'ai eu l'idée de la UIGestureRecognizer. Le seul problème est que cette animation qui reflète un peu la goutte de liquide. Oui, j'ai une méthode qui crée toujours des nouvelles cercle avec plus de hauteur et de points de la courbe, mais le problème est que la courbe ne fait pas de l'étiré chemin peu ovale à l'intérieur. Je pourrais poster le code pour que, si cela pouvait m'aider à mener. Merci beaucoup de l'homme. J'ai pensé à la mise en œuvre de ce et de le mettre sur GitHub. j'utilise CABasicAnimation fromValue, toValue. les chemins ont le même nombre de points que je suppose.
J'ai réglé le problème et j'ai vraiment belle animation après un long et dur travail, Il a été tout simplement lisse de calcul à appliquer pour CAShapeLayer chemin de Dessin à travers le changement de UIScrollView de l'Axe y. Pour ceux qui se demandent encore, Vous avez certainement utiliser le CAShapeLayer avec deux Arcs, mais de commencer à dessiner, sans déplacer les points. En fin de compte, vous obtiendrez Cercle avec topArc, BottomArc, deux lignes qui, de tous les deux ont deux points de la courbe.
Les gens Qui sont intéressés par cette solution, je suis sur le point de le mettre sur github. J'ai créé une classe générale où l'on peut facilement customze certains paramètres d'affichage. Je le mettrai dès que possible.
OriginalL'auteur Bahonur Nasritdinov | 2012-07-15
Vous devez vous connecter pour publier un commentaire.
Le pull-to-refresh de contrôle d'iOS 6, le Courrier est un standard UIKit de contrôle disponible à n'importe quelle application: voir le
refreshControl
bien surUITableViewController
et laUIRefreshControl
classe. (Notez aussi que vous pouvez en créer un de l'IB sur XCode 4.5 en choisissant "Rafraîchissant -> Activé" pour le table view controller.)ODRefreshControl est une bonne option si vous êtes le déploiement d'iOS 5 ou plus, cependant.
+1 pour la rétrocompatibilité de la solution.
et d'autres qui font référence à ce vieux thread, la fraîcheur, l'option activé est pour UITableviewControllers, pas seulement un UITableView
OriginalL'auteur rickster
Là vous allez....
https://github.com/Sephiroth87/ODRefreshControl
setAttributedTitle:
interface trouvé dans iOS 6.0, mais si vous pensez à ce sujet NSAttributedString de soutien est une sorte de restrictions avant de iOS 6.0.OriginalL'auteur Mike