Dans mes efforts pour mettre à niveau mon application pour prendre en charge IOS7, j'ai découvert que Je sous-classant le Ma classe est la suivante: P > p > maintenant dans l'iOS7, j'ai eu l'erreur suivante: p> et après l'enquête, j'ai compris que le code suivant provoque l'erreur: p> J'ai vérifié les sous-espions et j'ai vu qu'il est uIView au lieu d'UiImageView. probablement Apple a changé quelque chose. P> aucune idée de la façon de le réparer? p> p> uipagecontrol code> ne prend pas en charge le
uiImageView code>. Ils l'ont changé.
uipagecontrol code> afin de mettre des cercles personnalisés à la place des cercles habituels (ci-joint un exemple) p>
5 Réponses :
Peut-être que DOT n'est pas une sorte d'UIImageView, alors essayez comme ça
On dirait qu'ils ont changé les sous-espions vers Standard UIView code> s. J'ai réussi à travailler autour de cela en faisant cela:
for (int i = 0; i < [self.subviews count]; i++)
{
UIView* dotView = [self.subviews objectAtIndex:i];
UIImageView* dot = nil;
for (UIView* subview in dotView.subviews)
{
if ([subview isKindOfClass:[UIImageView class]])
{
dot = (UIImageView*)subview;
break;
}
}
if (dot == nil)
{
dot = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, dotView.frame.size.width, dotView.frame.size.height)];
[dotView addSubview:dot];
}
if (i == self.currentPage)
{
if(self.activeImage)
dot.image = activeImage;
}
else
{
if (self.inactiveImage)
dot.image = inactiveImage;
}
}
Comment remplacer le "SetCurrentPage" à Swift?
Cher Monsieur, j'aimerais savoir où mettre votre code?
Comme un charme !!
J'ai une solution de bit Nettoyant:
for (int i = 0; i < [self.subviews count]; i++) { UIView *dotView = [self.subviews objectAtIndex:i]; if ([dotView isKindOfClass:[UIImageView class]]) { UIImageView* dot = (UIImageView*)dotView; dot.frame = CGRectMake(dot.frame.origin.x, dot.frame.origin.y, _activeImage.size.width, _activeImage.size.height); if (i == self.currentPage) dot.image = _activeImage; else dot.image = _inactiveImage; } else { dotView.frame = CGRectMake(dotView.frame.origin.x, dotView.frame.origin.y, _activeImage.size.width, _activeImage.size.height); if (i == self.currentPage) [dotView setBackgroundColor:[UIColor colorWithPatternImage:_activeImage]]; else [dotView setBackgroundColor:[UIColor colorWithPatternImage:_inactiveImage]]; } }
Hmm, cela fonctionne bien. Mais comment pourrais-je les accumuler à l'aide de cette méthode? Les points sont de se fermer ensemble et je me débats pour trouver une solution. +1 pour cette réponse aussi!
Tout ce que vous avez à faire est d'ajuster le dot.frame. Il suffit de régler la plus grande largeur et de placer l'image de point au milieu.
Si la trame est plus grande, l'image se répète pour remplir l'espace d'où la partie "motif". Et vous ne pouvez pas centrer l'image en raison de cela. sauf si je manque quelque chose?
Oui. Vous avez raison. Nous définissons la propriété de couleur de fond. HM ... vous pouvez essayer de définir la couleur de fond DotView pour effacer, définir le cadre et ajouter UIImageView en haut avec votre image. Au milieu de DotView.
Je peux essayer que, aussi je ne suis pas sûr de savoir pourquoi, mais la définition de la largeur plus grande sur le cadre ne semble pas "pousser" les séparer. Ils se chevauchent, toute idée de celui-ci? Merci pour votre aide BTW, très appréciée.
Juste un petit refacteur pour la solution de Devgeek pour en faire un peu plus compact
simple remplacement Layoutsubviews code> dans votre sous-classe de
uipagecontrol code>
Comment remplacer le "SetCurrentPage" à Swift?