• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Das Monatsmotto Juli lautet -- Kitsch as Kitsch can -- Jeder von Euch kann dafür ganz individuell bestimmen, was für ihn Kitsch ist und ein Foto davon einsenden. Macht mit, traut Euch! --> Klick

#selector Parameter übergeben

TheFlint

Erdapfel
Registriert
18.09.16
Beiträge
4
<div class="bbWrapper">Hi Leute, ich habe ein Problem mit #selectors. Ich habe eine Methode: &quot;func move(imgView: UIImageView)&quot;. Nun weiß ich, dass ich einen Selektor für diese Methode so erstelle: &quot;#selector(ViewController.move(imgView<img src="/community/styles/apfeltalk/smilies/SmilingCheeks.png" class="smilie" loading="lazy" alt=":)" title="Smile :)" data-shortname=":)" />)&quot;. Jedoch kann ich keinen Wert für den Parameter imgView übergeben. Ich möchte aber eine Image View übergeben die ich zuvor programmatisch erstellt habe. Wie kann ich das machen?</div>
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
<div class="bbWrapper">Den ImageView übergeben muss derjenige, der die Methode letztendlich aufruft.</div>
 

TheFlint

Erdapfel
Registriert
18.09.16
Beiträge
4
<div class="bbWrapper"><a href="https://test.apfeltalk.de/community/members/218/" class="username" data-xf-init="member-tooltip" data-user-id="218" data-username="@MacApple">@MacApple</a> Genau, und das ist der Selektor, der wiederum an einen Timer gebunden ist. Es ist notwendig, dass der Selektor alle 0,1 sekunden (Timer) die Methode aufruft und eine Variable namens iView übergibt, die in der selben Methode wie der selektor erstellt wurde.</div>
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
<div class="bbWrapper">Ein Selector ruft nichts auf. Du übergibst den Selector dem Timer, damit der weiß, welche Methode er aufrufen soll. Ein Timer ruft aber nur eine Methode auf, die einen NSTimer als Parameter akzeptiert. Siehe <a href="https://developer.apple.com/reference/foundation/timer/1412416-scheduledtimer" target="_blank" class="link link--external" rel="nofollow ugc noopener">Dokumentation</a>.<br /> Kurz: das, was du dir da vorstellst, geht nicht.</div>
 

TheFlint

Erdapfel
Registriert
18.09.16
Beiträge
4
<div class="bbWrapper"><blockquote data-attributes="member: 218" data-quote="MacApple" data-source="post: 4959686" class="bbCodeBlock bbCodeBlock--expandable bbCodeBlock--quote js-expandWatch"> <div class="bbCodeBlock-title"> <a href="/community/goto/post?id=4959686" class="bbCodeBlock-sourceJump" rel="nofollow" data-xf-click="attribution" data-content-selector="#post-4959686">MacApple schrieb:</a> </div> <div class="bbCodeBlock-content"> <div class="bbCodeBlock-expandContent js-expandContent "> Ein Selector ruft nichts auf. Du übergibst den Selector dem Timer, damit der weiß, welche Methode er aufrufen soll. Ein Timer ruft aber nur eine Methode auf, die einen NSTimer als Parameter akzeptiert. Siehe <a href="https://developer.apple.com/reference/foundation/timer/1412416-scheduledtimer" target="_blank" class="link link--external" rel="nofollow ugc noopener">Dokumentation</a>.<br /> Kurz: das, was du dir da vorstellst, geht nicht. </div> <div class="bbCodeBlock-expandLink js-expandLink"><a role="button" tabindex="0">Zum Vergrößern anklicken....</a></div> </div> </blockquote><br /> <a href="https://test.apfeltalk.de/community/members/218/" class="username" data-xf-init="member-tooltip" data-user-id="218" data-username="@MacApple">@MacApple</a> <br /> Und wie kann ich in der Methode auf die ImageView des Timers zugreifen?</div>
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
<div class="bbWrapper">Ein Timer hat keinen ImageView. Du kannst dir ein Dictionary anlegen, mit dem Timer als Key und dem View als Value.<br /> Beispiel:<br /> <div class="bbCodeBlock bbCodeBlock--screenLimited bbCodeBlock--code"> <div class="bbCodeBlock-title"> Code: </div> <div class="bbCodeBlock-content" dir="ltr"> <pre class="bbCodeCode" dir="ltr" data-xf-init="code-block" data-lang=""><code>class Foo : NSObject { var views = [Timer: UIImageView]() func fired(timer: Timer) { if let view = views[timer] { // Do something with the view } } func createTimer() { let view = UIImageView() let timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(Foo.fired(timer:)), userInfo: nil, repeats: true) views[timer] = view } }</code></pre> </div> </div>Aber, wie dir in einem anderen Forum bereits mitgeteilt wurde, sieht das ja nach View Animation aus. Dafür bietet iOS mit Core Animation bessere Möglichkeiten.</div>
 

TheFlint

Erdapfel
Registriert
18.09.16
Beiträge
4
<div class="bbWrapper"><a href="https://test.apfeltalk.de/community/members/218/" class="username" data-xf-init="member-tooltip" data-user-id="218" data-username="@MacApple">@MacApple</a> vielen Dank. Wie würde eine Animation funktionieren, bei der sich eine ImageView konstant nach rechts bewegt, welche automatisch stoppt, wenn die ImageView eine gewisse X-Positon erreicht und dann die ImageView löscht?</div>
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
<div class="bbWrapper">Kleiner Beispiel-Playground:<br /> <div class="bbCodeBlock bbCodeBlock--screenLimited bbCodeBlock--code"> <div class="bbCodeBlock-title"> Code: </div> <div class="bbCodeBlock-content" dir="ltr"> <pre class="bbCodeCode" dir="ltr" data-xf-init="code-block" data-lang=""><code>//: Playground - noun: a place where people can play import UIKit import PlaygroundSupport let containerView = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 400)) containerView.backgroundColor = #colorLiteral(red: 0.9568627477, green: 0.6588235497, blue: 0.5450980663, alpha: 1) PlaygroundPage.current.liveView = containerView let movedView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 10)) movedView.backgroundColor = #colorLiteral(red: 0.5725490451, green: 0, blue: 0.2313725501, alpha: 1) containerView.addSubview(movedView) UIView.animate(withDuration: 2.0, animations: { movedView.frame = CGRect(x: 100, y: 100, width: 200, height: 200) }) { (flag) in movedView.removeFromSuperview() }</code></pre> </div> </div></div>