Ich versuche, eine benutzerdefinierte Alertview mit dynamischem Verhalten UIDynamicAnimator in NSObject-Klasse mit Swift erstellen, während Hinzufügen von UISnapBehaviour zu einer Ansicht in NSObject Klasse init Methode Snap-Verhalten nicht funktioniert schauen, zum Beispiel unter dem unten genannten CodeWie füge ich dynamisches Verhalten in NSObject-Klasse hinzu: Swift
import UIKit
class DynamicBehaviour: NSObject {
var Animator:UIDynamicAnimator!
var TargetView:UIView!
var TestView:UIView!
override init() {
super.init()
}
init(SourceViews:UIView) {
super.init()
TestView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
TestView.backgroundColor = UIColor.blueColor()
TargetView.addSubview(TestView)
Animator = UIDynamicAnimator(referenceView: TargetView)
let snapBehavior: UISnapBehavior = UISnapBehavior(item: TestView, snapToPoint: TargetView.center)
Animator.addBehavior(snapBehavior)
}
}
„Testview“ als Subview „Target“ hinzugefügt, aber das Verhalten Snap funktioniert nicht.
ich den gleichen Code in Objective
versuchte#import "DynamicBehaviour.h"
#import <UIKit/UIKit.h>
@interface DynamicBehaviour()
@property(nonatomic,strong)UISnapBehavior * Snap_behaviour;
@property (nonatomic,strong)UIDynamicAnimator * Animator;
@end
@implementation DynamicBehaviour
-(instancetype)initWithSourceView:(UIView *)TargetView{
if (self = [super init]) {
UIView * TestView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
TestView.backgroundColor = [UIColor blueColor];
[TargetView addSubview:TestView];
self.Animator = [[UIDynamicAnimator alloc]initWithReferenceView:TargetView];
self.Snap_behaviour = [[UISnapBehavior alloc]initWithItem:TestView snapToPoint:TargetView.center];
[self.Animator addBehavior:self.Snap_behaviour];
}
return self;
}
@end
es funktioniert gut, schnappt der „Testview“ zum Zentrum von TargetView.I weiß nicht, was ist falsch mit SWIFT-Code.
Hier ist, was ich versucht habe:
- Die dynamische Wirkung fein arbeitet, wenn in UIViewController Klasse codiert, existieren Problem nur während Subklassen NSObject in schnell.
- Ich habe versucht, die anderen dynamischen Verhaltensweisen wie UIGravityBehavior das gleiche Problem in Swift existiert.
- Erledigt die gleiche Beispielarbeit in ObjectiveC Objektklasse, es funktioniert gut, ich habe auch den funktionierenden ObjC Code angehängt.
Es scheint, dass das Problem in init-Methode oder Variable decleration existieren sind nicht sicher, dass Aber ich weiß nicht, wie das Problem zu beheben. Ich habe viele Artikel im Internet gelesen. Ich habe auch StackOverflow gesucht. Bitte helfen Sie.
Dank Andriy für Ihre Antwort , jetzt hatte ich stark "Snap_behaviour" erklärt, aber ich bin noch nicht in der Lage, dynamische Wirkung auf meinen Code zu bekommen. Dann Code, der von Ihnen empfohlen wurde, funktioniert perfekt. Ich habe U hinzugefügt IGravityBehaviour zu Ihrer "CombinedBehavior" -Klasse funktioniert es gut.Wenn ich versuche, UISnapBehaviour hinzuzufügen, löst es einen Laufzeitfehler aus. ** init ist für Objekte vom Typ UISnapBehavior ** nicht definiert. kannst du mir helfen, es zu lösen? – Gokul
var snap: UISnapBehavior? { willSet { wenn Snap! = Nil { animator.removeBehavior (Snap!) } } didSet { wenn Snap! = Nil { animator.addBehavior (Snap!) } } } // Setzen Sie das, wo Sie einrasten müssen, normalerweise in UILongPressPressureRecognazier: snap = UISnapBehavior (Element: selectedDrop !, snapToPoint: Punkt) // Entfernen Sie, wenn Sie mit Snap: snap = nil –