2016-08-21 3 views
4

Dans Xcode 8 beta 6, certaines des fonctions pour ajouter un chemin modifié, y compris ceux qui ajoutent un arc:CGMutablePath.addArc ne fonctionne pas dans Swift 3?

func addArc(center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool, transform: CGAffineTransform = default) 

Au-delà d'une définition de la fonction, il n'y a pas de documentation sur le site d'Apple. J'ai été incapable d'obtenir un arc réel à partir de cette fonction, et je me suis appuyé sur une deuxième version qui utilise des tangentes. Quelqu'un peut-il fournir un échantillon de travail? Pourrait-il juste être buggé?

Voici une fonction qui est brisée par le changement:

public class func createHorizontalArcPath(_ startPoint:CGPoint, width:CGFloat, arcHeight:CGFloat, closed:Bool = false) -> CGMutablePath 
    { 
     // http://www.raywenderlich.com/33193/core-graphics-tutorial-arcs-and-paths 

     let arcRect = CGRect(x: startPoint.x, y: startPoint.y-arcHeight, width: width, height: arcHeight) 

     let arcRadius = (arcRect.size.height/2) + (pow(arcRect.size.width, 2)/(8*arcRect.size.height)); 
     let arcCenter = CGPoint(x: arcRect.origin.x + arcRect.size.width/2, y: arcRect.origin.y + arcRadius); 

     let angle = acos(arcRect.size.width/(2*arcRadius)); 
     let startAngle = CGFloat(M_PI)+angle // (180 degrees + angle) 
     let endAngle = CGFloat(M_PI*2)-angle // (360 degrees - angle) 

     let path = CGMutablePath(); 
     path.addArc(center: arcCenter, radius: arcRadius, startAngle: startAngle, endAngle: endAngle, clockwise: true) 
     if(closed == true) 
     {path.addLine(to: startPoint)} 
     return path; 
    } 
+3

Comment est-il « ne fonctionne pas »? Quel résultat obtenez-vous, et qu'attendez-vous? –

+0

Il n'y a qu'une façon de "créer un arc" qui ne fonctionne pas, vous ne pensez pas? J'ai même inclus une fonction qui va démontrer. – GoldenJoe

+0

Il n'a pas pu être compilé. Il pourrait tomber en panne à l'exécution. Cela pourrait produire un "mauvais" chemin pour certaines données d'entrée. Cela pourrait produire un mauvais chemin pour toutes les données d'entrée. –

Répondre

9

Votre code Swift est basé sur le code Objective-C de http://www.raywenderlich.com/33193/core-graphics-tutorial-arcs-and-paths, où le chemin d'arc est créé comme

CGPathAddArc(path, NULL, arcCenter.x, arcCenter.y, arcRadius, 
      startAngle, endAngle, 0); 

En particulier, 0 est passé en argument au dernier paramètre bool clockwise. Cela devrait se traduire à false à Swift, non true:

path.addArc(center: arcCenter, radius: arcRadius, 
      startAngle: startAngle, endAngle: endAngle, clockwise: false) 
+0

HAHAHA sainte merde, qu'est-ce qui m'a manqué? Ugh, ces 3h du matin. Belle prise. – GoldenJoe