2014-04-04 12 views
5

Podążyłem za bardzo pomocnym samouczkiem na temat dodawania przeciągania podobnego do igły (http://guti.in/articles/creating-tinder-like-animations/); jednak mam jeden problem - gdy obraz odchodzi, chcę go zastąpić innym obrazem. Jak/gdzie mam to zrobić?Animacja z napisem "Tinder-Like Swipe" dla iOS

+0

Najprostszym rozwiązaniem byłoby dodać kolejną Draggable widok spodu pierwszego. Potem po prostu przełączasz się między nimi. (Podczas przeciągania pierwszego, drugi siedzi w swoim miejscu, aż pierwszy zostanie usunięty i na odwrót). Więc 2 identyczne widoki, a ty po prostu naprzemiennie, który przeciągasz, a który ukryty. – Dima

+0

https://github.com/modocache/MDCSwipeToChoose Może to zaoszczędzić trochę czasu. – Tim

+0

wypróbuj to https://github.com/nickypatson/TinderSwipeView – nickypatson

Odpowiedz

4

Zbudowałem prostszy i bardziej kompleksowy projekt oparty na tym samouczku. W szczególności można użyć tablicy obrazów i przypisać każdej karcie obraz oparty na indeksie obrazu. Czy obrazy będą dynamiczne lub statyczne?

nie może pomóc w tym momencie, ale tutaj jest to w każdym razie: https://github.com/cwRichardKim/TinderSimpleSwipeCards

0

ta odpowiedź opiera się na kodzie/odpowiedzi od cwRichardKim (dziękuję cwRichardKim!). nie znalazłem przewodnika, jak dodawać zdjęcia do każdej karty. wklejenie mojego podejścia poniżej (w tym examlple, obraz zakodowany url ciężko, ale w prawdziwej aplikacji można uzyskać URL obrazu z chmurą):

w DraggableView.h:

@property (nonatomic,strong)UIImageView* photoImageView; //%%% a placeholder for member photo to place on card 

w DraggableView.m:

... 
@synthesize photoImageView; 
... 
// - (id)initWithFrame:(CGRect)frame ... 
// add photo to card 
     //You need to specify the frame of the view 
     UIView *photoView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.frame.size.width,self.frame.size.width)]; 
     photoImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"place_holder_image.png"]]; 
     // UIImageView *imageView = [[UIImageView alloc] initWithImage:photo]; 
     //specify the frame of the imageView in the superview , here it will fill the superview 
     photoImageView.frame = photoView.bounds; 
     // add the imageview to the superview 
     [photoView addSubview:photoImageView]; 
     //add the view to the main view 
     [self addSubview:photoView]; 

w DraggableViewBackground.h:

@property(retain,nonatomic)NSArray* exampleCardUrls; 

w DraggableViewBackground.m:

... 
@synthesize exampleCardUrls; 
... 
exampleCardUrls = [[NSArray alloc]initWithObjects:@"http://images.clipartpanda.com/clipart-people-nTBX8zkgc.jpeg",@"http://epilepsyu.com/wp-content/uploads/2014/01/happy-people.jpg",@"http://alivecampus.com/wp-content/uploads/2014/09/people-02.jpg",@"https://www.google.com/images/srpr/logo11w.png",@"http://modalpoint.com/wp-content/uploads/2014/11/people-blue-stick-people-hi.png", nil]; 
... 
// ... -(DraggableView *)createDraggableViewWithDataAtIndex:(NSInteger)index ... 
// retrieve image for cell in background 
    NSURL *url = [NSURL URLWithString:exampleCardUrls[index]]; 
    [self loadImage:url withIndex:index]; 
... 
#pragma mark - cloud, load image 
- (void)loadImage:(NSURL *)imageURL withIndex:(NSInteger)index 
{ 
    // create array of objects to pass to next method 
    NSMutableArray* params = [[NSMutableArray alloc]init]; 
    [params addObject:imageURL]; 
    NSNumber *indexNumber = [NSNumber numberWithInt:index]; 
    [params addObject:indexNumber]; 

    NSOperationQueue *queue = [NSOperationQueue new]; 
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] 
             initWithTarget:self 
             selector:@selector(requestRemoteImage:) 
             object:params]; 
    [queue addOperation:operation]; 
} 

- (void)requestRemoteImage:(NSMutableArray*)params 
{ 
    // get data from params 
    NSURL* imageURL = params[0]; 

    NSData *imageData = [[NSData alloc] initWithContentsOfURL:imageURL]; 
    UIImage *image = [[UIImage alloc] initWithData:imageData]; 
    params[0] = image; 

    [self performSelectorOnMainThread:@selector(placeImageInUI:) withObject:params waitUntilDone:YES]; 
} 

- (void)placeImageInUI:(NSArray*)params 
{ 
    // get data from params 
    UIImage* image = params[0]; 
    NSNumber* indexNumber = params[1]; 
    NSInteger index = [indexNumber integerValue]; 

    DraggableView* myDraggableView = allCards[index]; 
    myDraggableView.photoImageView.image = image; 
    allCards[index] = myDraggableView; 

} 
2

sprawdzić to uwagę, napisany w szybkim 4

https://github.com/nickypatson/TinderSwipeView

func beingDragged (_ gestureRecognizer: UIPanGestureRecognizer) {

xFromCenter = gestureRecognizer.translation(in: self).x 
    yFromCenter = gestureRecognizer.translation(in: self).y 
    switch gestureRecognizer.state { 
    //%%% just started swiping 
    case .began: 
     originalPoint = self.center; 
     break; 

    //%%% in the middle of a swipe 
    case .changed: 
     let rotationStrength = min(xFromCenter/ROTATION_STRENGTH, ROTATION_MAX) 
     let rotationAngel = .pi/8 * rotationStrength 
     let scale = max(1 - fabs(rotationStrength)/SCALE_STRENGTH, SCALE_MAX) 
     center = CGPoint(x: originalPoint.x + xFromCenter, y: originalPoint.y + yFromCenter) 
     let transforms = CGAffineTransform(rotationAngle: rotationAngel) 
     let scaleTransform: CGAffineTransform = transforms.scaledBy(x: scale, y: scale) 
     self.transform = scaleTransform 
     updateOverlay(xFromCenter) 
     break; 

    case .ended: 
     afterSwipeAction() 
     break; 

    case .possible:break 
    case .cancelled:break 
    case .failed:break 
    } 
} 

niech panGestureRecognizer = UIPanGestureRecognizer (docelowa: samodzielne działanie : #selector (self.beingDragged)) addGestureRecognizer (panGestureRecognizer)

Mam nadzieję, że to zadziała. Daj mi znać

dzięki

Powiązane problemy