11
votes

Uipagecontrol n'est pas avec UiImageView dans iOS7

Dans mes efforts pour mettre à niveau mon application pour prendre en charge IOS7, j'ai découvert que uipagecontrol ne prend pas en charge le uiImageView . Ils l'ont changé.

Je sous-classant le uipagecontrol afin de mettre des cercles personnalisés à la place des cercles habituels (ci-joint un exemple)

Ma classe est la suivante: xxx

pagecontrol (le bleu est la page actuelle)

maintenant dans l'iOS7, j'ai eu l'erreur suivante: xxx

et après l'enquête, j'ai compris que le code suivant provoque l'erreur: xxx

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.

aucune idée de la façon de le réparer?


1 commentaires

Comment remplacer le "SetCurrentPage" à Swift?


5 Réponses :


1
votes

Peut-être que DOT n'est pas une sorte d'UIImageView, alors essayez comme ça xxx


0 commentaires

38
votes

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;
    }
}


3 commentaires

Comment remplacer le "SetCurrentPage" à Swift?


Cher Monsieur, j'aimerais savoir où mettre votre code?


Comme un charme !!



1
votes

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]];
    }
}


5 commentaires

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.



1
votes

Juste un petit refacteur pour la solution de Devgeek pour en faire un peu plus compact xxx


0 commentaires

0
votes

simple remplacement Layoutsubviews dans votre sous-classe de uipagecontrol xxx


0 commentaires