Сначала round
ваш degrees
, а затем вычислить реальные градусы
func getRotateAngle() {
let radians = atan2(myView.transform.b, myView.transform.a)
var degrees = radians * 180 / .pi
degrees.round()
let realDegrees = degrees >= 0 ? abs(degrees) : 360 + degrees
print("Degrees:: \(realDegrees)")
}
Мы используем подкласс Application, который предлагает следующие методы:
/**
* The URI of the AMF channel endpoint. <br/>
* Default to #rootURI + #channelEndPointContext + #this.channelEndPointPathInfo
*/
public function get channelEndPointURI() : String
{
return this.rootServerURI + ( this.channelEndPointContext ? this.channelEndPointContext : "" ) + this.channelEndPointPathInfo
}
/**
* The root URI (that is scheme + hierarchical part) of the server the application
* will connect to. <br/>
* If the application is executing locally, this is the #localServerRootURI. <br/>
* Else it is determined from the application #url. <br/>
*/
public function get rootServerURI() : String
{
var result : String = ""
if ( this.url && ( this.url.indexOf("file:/") == -1 ) )
{
var uri : URI = new URI( this.url )
result = uri.scheme + "://" + uri.authority + ":" + uri.port
}
else
{
result = this.localServerRootURI
}
return result
}
Это универсальное приложение поддерживает channelEndPointContext
, channelEndPointPathInfo
и localServerRootURI
свойства (обычно «mycontext» и «/ messagebroker / amf /» в вашем примере, корень локального сервера используется, когда приложение выполняется через Flex Builder) в таких случаях он имеет файл : //
URL).
Определение полного URI конечной точки затем выполняется с использованием либо свойства localServerRootURI
, либо с помощью URL-адреса приложения
, поскольку наши службы предоставляются тем же сервером, который обслуживает SWF-файл приложения (который является (насколько я понимаю, ваш случай тоже).
Итак, в вашем примере можно написать:
<SuperApplication ...> <!-- SuperApplication is the enhanced Application subclass -->
<mx:HTTPService id="myHTTPService" url="{this.channelEndPointURI}"/>
</SuperApplication>
Начиная отсюда, можно также автоматически определить channelEndPointContext
из URL приложения вместо жестко закодировать его, как показано в этом примере.
Почему бы не вызвать функцию javascript в оболочке через ExternalInterface для возврата значения location.hostname?
<mx:Script>
<![CDATA[
private var hostname:String;
private function getHostName():void
{
hostname = ExternalInterface.call(getHostName);
}
]]>
</mx:Script>
javascript в обертке:
<script type="text/javascript">
function getHostName()
{
return location.hostname;
}
</script>
Я использовал FlashVars для успешной передачи URL-адресов. В вашем шаблоне html:
var rootURL = location.href.substring(0,location.href.indexOf("flexBin"));
...
AC_FL_RunContent(
"src", "${swf}",
"FlashVars", "rootURL="+rootURL,
"width", "${width}",
...
А затем в flex:
service.rootURL = Application.application.parameters.rootURL;
Приятно то, что вы действительно можете таким образом передавать с сервера все, что захотите.
Вы можете использовать BrowserManager, чтобы получить информацию об URL.
var bm:IBrowserManager = BrowserManager.getInstance();
bm.init(Application.application.url);
var url:String = bm.base;
см. Также http://livedocs.adobe.com/flex/3/html/deep_linking_7.html#251252