2014-11-04 3 views
9

I UIPageviewContoller umgesetzt haben mehrere viewcontoller Blick auf halber Tiefe meines Bildschirm zu unterstützen. Jetzt ist meine Frage, wie man den Facebook-Style-Panning-Effekt auf dieser Subview auf meinem Pageview-Controller unterstützt.implementieren Facebook Messenger Stil Pfanne Vollbildansicht ähnliche Wirkung

Ich möchte Effekt Facebook-Nachricht Stil erreichen, die sie in der Kamera angewendet haben, dass mit pan Finger wir Ansicht als Vollbild machen. und wenn wir die gleiche Ansicht schwenken, wird es innerhalb des Originals von der Ansicht justieren. Ihave angebracht etwas Bildschirm für besseres Verständnis.

subview have pan gesture pan up to full screen pandown to minimize after pan down reset to original postion

und es sollte integrative Pop Geste unterstützen.

ienterative pop

ich konnte die Lage ähnliche Wirkung zu erhalten, aber dafür habe ich im Hinblick auf Hauptfenster hinzugefügt habe, um Aussicht auf Vollbild schwenken kann, aber durch diesen Ansatz der Lage, ich bin nicht interaktive Pop iOS Standard Geste und um dies zu erreichen Ansatz ist nicht gut mit meiner aktuellen pageviewcontoller-Implementierung.

und wenn Ansicht wird im Fenster hinzugefügt, als wenn Benutzer-Taste gedrückt wieder als Fensterelement wird er sich nicht bewegen wird in dem Fenster auch so bleiben Fenster Ansatz nicht gut ist.

gibt es eine andere Art und Weise ähnliche Wirkung zu erhalten? Kann UIViewControllerInteractiveTransitioning dafür helfen?

Vielen Dank im Voraus. Ich weiß, dass ich bessere Herangehensweise von euch bekommen werde, die dafür stabiler sein werden, als subview dem Fenster hinzuzufügen.

+0

Ich versuche, etwas ähnliches zu implementieren. Können Sie mir einen Vorschlag geben, wie Sie das oben genannte mit dem PageViewController implementiert haben? Vielen Dank. –

+0

Ich habe die Ansicht des Controllers im Fenster und mit der Schwenkgeste hinzugefügt, um den Y-Frame an das Fenster anzupassen. Sie können versuchen, zu addieren, ist entsprechend Ihrem Bedarf wie addsubview in Ansicht viewcontroller Ansicht oder Fenster oder Viewcontroller. Der UIEdgesture (leftedge) Recognizer hilft Ihnen, den Frame zu setzen, wenn der interaktive Backswipe die x-Position einstellt. Ich bin gerade von meinem Schreibtisch weg und kann Ihnen keinen Code geben. Ich werde Sie nach ein paar Tagen posten lassen Sie mich wissen, wenn Sie nicht in der Lage, das zu tun, –

Antwort

1

Haben Sie versucht, Ihrer Unteransicht A eine Wischgeste hinzuzufügen?

UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeScreen:)]; 
swipeUp.direction = UISwipeGestureRecognizerDirectionUp; 
[yourSubViewA addGestureRecognizer:swipeUp]; 

und es Handling -

- (void)didSwipeScreen:(UISwipeGestureRecognizer *)gesture { 
switch (gesture.direction) { 
    case UISwipeGestureRecognizerDirectionUp: { 
     [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{ 
      [yourSubViewA setFrame:desiredFullScreenFrame]; 
     } completion:^(BOOL finished) { 
     }]; 
    } 
     break; 
    default: 
     break; 
    } 
} 

bringen in der Standardposition Sie eine andere Wischgeste mit UISwipeGestureRecognizerDirectionDown hinzufügen können, oder vielleicht auch nur ein Tippgeste. Und für Seitenmenü MFSideMenu ist nett man.

+0

Wirklich möchte ich Dia-Menü. Ich ähnliche Wirkung wird bereits durch Pan Geste impensiert, aber ich möchte einen Effekt wie Sie subview auf Pan auf volle Fenster erweitern. –

+0

Ok, dann wird UISwipeGestureRecognizer am UISwipeGestureRecognizerDirectionUp-Ereignis funktionieren. – RoHaN

0
Here, i used same code for my app for video sharing (same as facebook messenger media sharing) 

Create one Uiview Name as ViewCamera with one labelHoldText and three buttons 
    and download SCRecoder from github 

import SCRecoder class here in (.h) file and do same as below 

     #import <UIKit/UIKit.h> 
     #import "SCRecorder.h" 
     #import "SCAudioTools.h" 
     #import "SCRecorderFocusView.h" 
     #import "SCRecordSessionManager.h" 
     #import "SCTouchDetector.h" 


     @protocol VideoRecordDelegate <NSObject> 

     @optional 

     -(void)VideoRecorded:(NSURL *)assetUrl; 

     @end 

     typedef enum : NSInteger { 

      NOTRECORDING = 0, 
      RECORDING=1, 
      RETAKE, 

     } ENUMRecordType; 

     @interface ChatScreen : UIViewController<ChatCellDelegate,SCRecorderDelegate,UITableViewDataSource,UITableViewDelegate,,UIGestureRecognizerDelegate> 
     { 
      IBOutlet UIView *viewbottomForCamera; 

      __weak IBOutlet UIButton *btnViewCameraChange; 
      __weak IBOutlet UIButton *btnViewFullScree; 
      __weak IBOutlet UIButton *btnVideoSend; 


      PDColoredProgressView *progressView; 
      NSTimer *timerForVideoSend; 
      CGFloat progressValue; 
      UILabel *lblHoldtext; 
      UILabel *lblCount; 
      BOOL isCanceled,isOpen; 

      IBOutlet UIView *viewCamera; 



      //new 

      UIView *previewView; 
      CALayer *layerQ; 

      SCRecorder *_recorder; 
      UIImage *_photo; 
      SCRecordSession *_recordSession; 
      ENUMRecordType enumRecordType; 


     } 
     - (IBAction)btnInstantVideoTapped:(id)sender; 
     - (IBAction)btnViewCameraTapped:(id)sender; 
     - (IBAction)btnViewSendTapped:(id)sender; 
     - (IBAction)btnViewFullScreenTapped:(id)sender; 

     @property (strong, nonatomic) SCRecorderFocusView *focusView; 
     @property (nonatomic) float progress; 
     @property (nonatomic, strong) CAShapeLayer *progressLayer; 
     @property (nonatomic,strong) id<VideoRecordDelegate> deleagte; 

     @end 

      - (void)viewDidLoad { 

      [super viewDidLoad]; 

//lbl hold text for = @"@"Hold send button for video, tap for photo"" 
      lblHoldtext =[[UILabel alloc]init]; 
      lblHoldtext.adjustsFontSizeToFitWidth = YES; 
      [lblHoldtext setTextAlignment:NSTextAlignmentCenter]; 

      progressValue = 0; 

       // pan for swipable camera view on touch  
      UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
      [panRecognizer setMinimumNumberOfTouches:1]; 
      [panRecognizer setMaximumNumberOfTouches:1]; 
      [viewCamera addGestureRecognizer:panRecognizer]; 

      //for video sharing on hold button  
      UILongPressGestureRecognizer *longGestureForSendImageORVideo = [[UILongPressGestureRecognizer alloc] init]; 
      [longGestureForSendImageORVideo addTarget:self action:@selector(LongPressForSendVideo:)]; 
      [longGestureForSendImageORVideo setMinimumPressDuration:1.0]; 
      [btnVideoSend addGestureRecognizer:longGestureForSendImageORVideo]; 

      [btnVideoSend.layer setBorderColor:[UIColor whiteColor].CGColor]; 
      //  UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"2Chat"]]; 
      [lblHoldtext setFrame:CGRectMake(20, 10, SCREENWIDTH-40, 20)]; 
      [lblHoldtext setText:@"Hold send button for video, tap for photo"]; 
      [viewCamera setFrame:CGRectMake(0, SCREENHEIGHT, SCREENWIDTH, viewCamera.frame.size.height)]; 
      [lblHoldtext setTextColor:[UIColor whiteColor]]; 
      [viewCamera addSubview:lblHoldtext]; 
      [viewCamera setBackgroundColor:[UIColor grayColor]]; 

      [self.navigationController.view addSubview:viewCamera]; 
      progressView = [[PDColoredProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; 
      progressView.frame =CGRectMake(0,viewCamera.frame.size.height-32, SCREENWIDTH, viewbottomForCamera.frame.size.height); 
      [progressView.layer setMasksToBounds:NO]; 
      [progressView setTrackTintColor:[UIColor clearColor]]; 
      progressView.progress = 0.0; 

      lblCount = [[UILabel alloc]initWithFrame:CGRectMake(40,15, 50, 30)]; 
      [lblCount setTextColor:[UIColor whiteColor]]; 
      [progressView addSubview:lblCount]; 

      //video recording 
      _recorder = [SCRecorder recorder]; 
      _recorder.sessionPreset = AVCaptureSessionPresetMedium;//[SCRecorderTools bestSessionPresetCompatibleWithAllDevices]; 
      _recorder.maxRecordDuration = CMTimeMake(VIDEODURATIONLIMIT, 1); 
      _recorder.delegate = self; 
      _recorder.autoSetVideoOrientation = YES; 

      self.focusView = [[SCRecorderFocusView alloc] initWithFrame:viewCamera.bounds]; 
      self.focusView.recorder = _recorder; 

      [viewCamera addSubview:self.focusView]; 

     // UIView *previewViewDemo = previewView; 
      _recorder.previewView = viewCamera; 
      [_recorder.videoConfiguration setSizeAsSquare:YES]; 
      //[_recorder.videoConfiguration setSize:CGSizeMake(SCREENWIDTH/2, SCREENHEIGHT/2)]; 
      _recorder.initializeRecordSessionLazily = YES; 



      [_recorder openSession:^(NSError *sessionError, NSError *audioError, NSError *videoError, NSError *photoError) { 

       //NSLog(@"==== Opened session ===="); 
       //NSLog(@"Session error: %@", sessionError.description); 
       //NSLog(@"Audio error : %@", audioError.description); 
       //NSLog(@"Video error: %@", videoError.description); 
       //NSLog(@"Photo error: %@", photoError.description); 
       //NSLog(@"======================="); 
       [self prepareCamera]; 
      }]; 



     } 
     - (void)layoutSubviews { 
      // resize your layers based on the view's new bounds 
      previewLayer.frame = viewCamera.bounds; 
     } 

     - (void)didReceiveMemoryWarning { 
      [super didReceiveMemoryWarning]; 
     } 

     -(void)viewWillAppear:(BOOL)animated 
     { 
      [super viewWillAppear:YES];  

     } 
     -(void)viewWillDisappear:(BOOL)animated 
     { 
      [super viewWillDisappear:YES]; 
      [ShareObj setIsChtScreenPresent:NO]; 
      [self.view endEditing:YES]; 
      [viewCamera removeFromSuperview]; 
      [_recorder endRunningSession]; 

      [[NSNotificationCenter defaultCenter] removeObserver:self]; 
     } 

     -(void)viewDidAppear:(BOOL)animated 
     { 
      [super viewDidAppear:YES]; 
      [_recorder startRunningSession]; 

     } 
     - (IBAction)btnInstantVideoTapped:(id)sender { 

     [self.view endEditing:YES]; 
     if (!isOpen) { 

      isOpen = YES; 
      [UIView animateWithDuration:0.5 animations:^{ 


       [_recorder.previewView setFrame:CGRectMake(0, SCREENHEIGHT-258,SCREENWIDTH,258)]; 
       _recorder.previewLayer.frame = _recorder.previewView.bounds; 
       layerQ.frame = _recorder.previewView.bounds; 
       [chatBottomView setFrame:CGRectMake(0,_recorder.previewView.frame.origin.y-chatBottomView.frame.size.height*2-12, SCREENWIDTH, chatBottomView.frame.size.height)]; 
       NSLog(@"hide frame = %@",NSStringFromCGRect(chatBottomView.frame)); 
       demoFrame=chatBottomView.frame; 

       UISwipeGestureRecognizer *panView=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)]; 
       [_recorder.previewView addGestureRecognizer:panView]; 
       [_recorder.previewView bringSubviewToFront:viewbottomForCamera]; 
       [viewbottomForCamera bringSubviewToFront:btnViewFullScree]; 
       [viewbottomForCamera bringSubviewToFront:btnViewCameraChange]; 
       [self.navigationController.view addSubview:viewCamera]; 


      }completion:^(BOOL finished) { 


      }]; 

     } 
     else 
     { 
      isOpen = NO; 

      [UIView animateWithDuration:0.5 animations:^{ 
       CGRect frame = chatBottomView.frame; 
       frame.origin.y = SCREENHEIGHT-frame.size.height-NAVBARHEIGHT; 
       [chatBottomView setFrame:frame]; 
       [_recorder.previewView setFrame:CGRectMake(0, SCREENHEIGHT, SCREENWIDTH, viewCamera.frame.size.height)]; 
       [tblChatMessage setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)]; 
       [tblChatMessage setScrollIndicatorInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 


       NSLog(@" hide frame = %@",NSStringFromCGRect(frame)); 
      } completion:^(BOOL finished) { 
       [viewCamera removeFromSuperview]; 
      }]; 
     } 
    } 

     #pragma mark Gesture Event is called here.. 
    -(void)LongPressForSendVideo: (UILongPressGestureRecognizer*)recognizer 
    { 

     CGPoint pointOfTouch = [recognizer locationInView:viewbottomForCamera]; 

     if (recognizer.state == UIGestureRecognizerStateEnded) { 

      [progressView setProgress:0.0 animated:YES]; 
      progressValue=0.0; 
      [progressView removeFromSuperview]; 
      [timerForVideoSend invalidate]; 
      timerForVideoSend =nil; 
      [layerQ removeFromSuperlayer]; 
      [btnViewCameraChange.layer setOpacity:1]; 
      [btnViewFullScree.layer setOpacity:1]; 

      [lblHoldtext setText:@"Hold send button for video, tap for photo"]; 

     } 
     else if (recognizer.state==UIGestureRecognizerStateChanged) 
     { 
      if (CGRectContainsPoint(btnVideoSend.frame, pointOfTouch)) { 
       // inside 
       [lblHoldtext setText:@"To cancel, drag your finger off send button"]; 

       NSLog(@"inside"); 
       [progressView setTintColor: [UIColor colorWithRed: 43.0/255.0 green: 134.0/255.0 blue: 225.0/255.0 alpha: 1]]; 
       [layerQ setBackgroundColor:[UIColor clearColor].CGColor]; 

      } else { 
       // outside 
       NSLog(@"outside"); 
       [lblHoldtext setText:@"Let go to delete and start over"]; 

       [progressView setTintColor:[UIColor redColor]]; 
       [layerQ setBackgroundColor:[UIColor colorWithRed:255.0/255.0 green:0/255.0 blue:0/255.0 alpha:0.2].CGColor]; 



      } 

     } 
     else if (recognizer.state==UIGestureRecognizerStateBegan) 
     { 
      layerQ = [[CALayer alloc]init]; 
      [layerQ setFrame:_recorder.previewLayer.frame]; 
      [viewCamera.layer addSublayer:layerQ]; 
      [btnViewCameraChange.layer setOpacity:0.3]; 
      [btnViewFullScree.layer setOpacity:0.3]; 
      [lblHoldtext setText:@"To cancel, drag your finger off send button"]; 

      [progressView setProgress:0.0 animated:YES]; 
      progressValue=0.0; 
      if (timerForVideoSend == nil) { 
       timerForVideoSend = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(progressChange) userInfo:nil repeats:YES]; 
      } 
      [progressView setTintColor: [UIColor colorWithRed: 43.0/255.0 green: 134.0/255.0 blue: 225.0/255.0 alpha: 1]]; 
      [viewCamera addSubview:progressView]; 
      [viewCamera bringSubviewToFront:viewbottomForCamera]; 

     } 

    } 
    -(void)progressChange 
    { 
     progressValue = progressValue + 0.0065; 
     [viewCamera bringSubviewToFront:lblCount]; 
     [lblCount setText:[NSString stringWithFormat:@"%.1f",progressValue]]; 
     [progressView setProgress:progressValue animated:YES]; 
    } 
    - (void)handlePan:(UIPanGestureRecognizer*)recognizer 
    { 
     CGPoint vel = [recognizer velocityInView:viewCamera]; 
     CGFloat velocityFrame = (vel.y/70); 

     if (vel.y > 0) 
     { 
      // user dragged towards the right 
      NSLog(@" down"); 


       velocityFrame = velocityFrame; 


      NSLog(@"velocity%f",velocityFrame); 

      if (_recorder.previewView.frame.size.height >= 256) { 

        _recorder.previewView.frame=CGRectMake(0, _recorder.previewView.frame.origin.y+velocityFrame, SCREENWIDTH, _recorder.previewView.frame.size.height-velocityFrame); 
        [viewbottomForCamera setBackgroundColor:COLOR_WITH_RGBA(0, 0, 0, 0)]; 
        CGFloat alphacolor = _recorder.previewView.frame.size.height/2000; 
        [viewbottomForCamera setFrame:CGRectMake(0, _recorder.previewView.frame.size.height-65, SCREENWIDTH, 65)]; 
        [viewbottomForCamera setBackgroundColor:COLOR_WITH_RGBA(37, 37, 38, alphacolor)]; 
        [lblHoldtext setFrame:CGRectMake(0, 0, 0, 0)]; 
        [progressView.layer setFrame:viewbottomForCamera.frame]; 
      } 

     } 
     else 
     { 

      velocityFrame = -(velocityFrame); 
      velocityFrame = velocityFrame; 

      NSLog(@"velocity%f",velocityFrame); 
      NSLog(@"up"); 
      if (_recorder.previewView.frame.origin.y >5) { 


       [UIView animateWithDuration:0.2 animations:^{ 


        _recorder.previewView.frame=CGRectMake(0, _recorder.previewView.frame.origin.y-velocityFrame, SCREENWIDTH, _recorder.previewView.frame.size.height+velocityFrame); 
        _recorder.previewLayer.frame = self.navigationController.view.bounds; 
        [viewbottomForCamera setFrame:CGRectMake(0,_recorder.previewView.frame.size.height-65, SCREENWIDTH, 65)]; 
        CGFloat alphacolor = viewCamera.frame.size.height/1000; 
        [lblHoldtext setFrame:CGRectMake(0, 0, 0, 0)]; 
        [progressView.layer setFrame:viewbottomForCamera.frame]; 


        if (alphacolor <= 0.6) { 
         [viewbottomForCamera setBackgroundColor:COLOR_WITH_RGBA(37, 37, 38, alphacolor)]; 
        } 
        [lblHoldtext setFrame:CGRectMake(0, 0, 0, 0)]; 

       } completion:^(BOOL finished) { 

       }]; 
      } 

     } 

     if(recognizer.state == UIGestureRecognizerStateEnded) 
     { 
      if (vel.y < 0) { 

       [UIView animateWithDuration:0.2 animations:^{ 

        _recorder.previewView.frame=CGRectMake(0, 0, SCREENWIDTH, SCREENHEIGHT); 
        [viewbottomForCamera setFrame:CGRectMake(0, _recorder.previewView.frame.size.height-65, SCREENWIDTH, 65)]; 
        CGFloat alphacolor = _recorder.previewView.frame.size.height/1000; 
        if (alphacolor <= 0.6) { 
         [viewbottomForCamera setBackgroundColor:COLOR_WITH_RGBA(37, 37, 38, alphacolor)]; 

        } 
        [progressView.layer setFrame:viewbottomForCamera.frame]; 



       } completion:^(BOOL finished) { 
        _recorder.previewLayer.frame = _recorder.previewView.bounds; 

        [lblHoldtext setFrame:CGRectMake(20, viewbottomForCamera.frame.origin.y-30, SCREENWIDTH-40, 20)]; 

       }]; 


      } 
      else 
      { 

       [UIView animateWithDuration:0.1 animations:^{ 
        [_recorder.previewView setFrame:CGRectMake(0, SCREENHEIGHT-258,SCREENWIDTH,258)]; 
        [viewbottomForCamera setFrame:CGRectMake(0, _recorder.previewView.frame.size.height-65, SCREENWIDTH, 65)]; 
        [viewbottomForCamera setBackgroundColor:COLOR_WITH_RGBA(0, 0, 0, 0)]; 
        [progressView.layer setFrame:viewbottomForCamera.frame]; 




       }completion:^(BOOL finished) { 
        _recorder.previewLayer.frame = _recorder.previewView.bounds; 

        [lblHoldtext setFrame:CGRectMake(20, 10, SCREENWIDTH-40, 20)]; 

       }]; 
      } 
     } 
    } 
    -(IBAction)btnViewCameraTapped:(id)sender 
    { 

    } 
    //take image 
    - (IBAction)btnViewSendTapped:(id)sender { 

    // AVCaptureConnection *videoConnection = nil; 
    //  
    // for (AVCaptureConnection *connection in stillImageOutput.connections) { 
    //   
    //  for (AVCaptureInputPort *ports in [connection inputPorts]) { 
    //    
    //   if ([[ports mediaType] isEqual:AVMediaTypeVideo]) { 
    //    videoConnection = connection; 
    //    break; 
    //   } 
    //  } 
    //  if (videoConnection) { 
    //   break; 
    //  } 
    // } 
    //  
    // [stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) { 
    //  
    //  if (imageDataSampleBuffer !=nil) { 
    //    
    //   NSData *imagedata = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer]; 
    //   UIImage *image =[UIImage imageWithData:imagedata]; 
    //  } 
    // }]; 
    } 
    //open/Close view 
    - (IBAction)btnViewFullScreenTapped:(id)sender { 

     [lblHoldtext setFrame:CGRectMake(0, 0, 0, 0)]; 
    // [lblHoldtext setText:@"To cancel, drag your finger off send button"]; 
    // [lblHoldtext setText:@"Let go to delete and start over"]; 

     if (_recorder.previewView.frame.size.height >= SCREENHEIGHT/2+100) { 

      [UIView animateWithDuration:0.5 animations:^{ 

       [viewCamera setFrame:CGRectMake(0, SCREENHEIGHT-256,SCREENWIDTH,258)]; 
       [lblHoldtext setFrame:CGRectMake(20, 10, SCREENWIDTH-40, 20)]; 
       [viewbottomForCamera setFrame:CGRectMake(0, _recorder.previewView.frame.size.height-65, SCREENWIDTH, 65)]; 
       [viewbottomForCamera setBackgroundColor:COLOR_WITH_RGBA(0, 0,0,0)]; 
       [progressView.layer setFrame:viewbottomForCamera.frame]; 


      }completion:^(BOOL finished) { 
       _recorder.previewLayer.frame = viewCamera.bounds; 

      }]; 
     } 
     else 
     { 
      [UIView animateWithDuration:0.5 animations:^{ 
       viewCamera.frame=CGRectMake(0, 0, SCREENWIDTH, SCREENHEIGHT); 
       _recorder.previewLayer.frame = viewCamera.bounds; 
       [viewbottomForCamera setFrame:CGRectMake(0, _recorder.previewView.frame.size.height-65, SCREENWIDTH, 65)]; 
       CGFloat alphacolor = _recorder.previewView.frame.size.height/1000; 
       [progressView.layer setFrame:viewbottomForCamera.frame]; 

       if (alphacolor <= 0.7) { 
        [viewbottomForCamera setBackgroundColor:COLOR_WITH_RGBA(37, 37, 38, alphacolor)]; 

       } 


      } completion:^(BOOL finished) { 

       [lblHoldtext setFrame:CGRectMake(20, viewbottomForCamera.frame.origin.y-30, SCREENWIDTH-40, 20)]; 

      }]; 

     } 
    } 
+0

Hey Mega sein wirklich beantworten denke ich, aber er sollte entweder Beschreibung oder Kommentare im Code geben ..... – TheMall

+0

@MegaTron hey es die Antwort und eine Beschreibung finden Sie durch Kommentare (//) in meinem Code, es ist perfekt für mich arbeiten und es ist Arbeit wie fb messenger :) – jatin