2013-06-19 2 views
-1

У меня есть этот образ, который UIButton:Stretch изображение на верхней части кнопки, чтобы нажать View Controller

before

Я хочу, чтобы добавить какой-то жест (панорамирование жест) сдвиньте его в правильно, и я хочу, чтобы изображение растянуть вправо также как это:

after

это очень похоже на «Слайд для разблокировки» на iPhone в методы, но без того же изображения, что движется вокруг слева направо.

Возможно ли это?

EDIT:

Я добавил UIPanGestureRecognizer к моей кнопке, как это:

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(buttonDidDragged:)]; 
[self.buttonAbout addGestureRecognizer:panGesture]; 

self.buttonFrame = self.buttonAbout.frame; 

Также я сохранил кнопку кадра в CGRect.

Теперь это методы «buttonDidDragged», но у меня также есть проблема, кнопка, похоже, идет вправо, но изображение остается тем же. он не растянется.

- (IBAction)buttonDidDragged:(UIPanGestureRecognizer*)gesture 
{ 
    CGPoint translation = [gesture translationInView:self.view]; 

// gesture.view.center = CGPointMake(gesture.view.center.x + translation.x, gesture.view.center.y); 

    NSLog(@"%f",gesture.view.frame.origin.x + gesture.view.frame.size.width); 
    gesture.view.frame = CGRectMake(gesture.view.frame.origin.x, 
            gesture.view.frame.origin.y, 
            gesture.view.frame.size.width + translation.x, 
            gesture.view.frame.size.height); 

    UIButton *button = (UIButton*)gesture.view; 
    UIImage *buttonImage = [UIImage imageNamed:@"about_us_button.png"]; 
    buttonImage = [buttonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 80, 0, 0)]; 
    [button setImage:buttonImage forState:UIControlStateNormal]; 
    [button setImage:buttonImage forState:UIControlStateHighlighted]; 

    if (gesture.state == UIGestureRecognizerStateEnded) 
    { 
     [UIView animateWithDuration:0.5 
           delay:0 
          options:UIViewAnimationOptionCurveEaseOut 
         animations:^{ 
          CGPoint finalPoint = CGPointMake(self.buttonFrame.origin.x + (self.buttonFrame.size.width/2), 
                   self.buttonFrame.origin.y + (self.buttonFrame.size.height/2)); 
//        gesture.view.center = finalPoint; 
          button.frame = newFrame; // This is where you change the frame of the button to make it stretch. 
         } completion:nil]; 
    } 


    [gesture setTranslation:CGPointMake(0, 0) inView:self.view]; 
} 
+0

ребята, я не работаю, но, во-первых, в воскресенье я проверю ответы. Большое спасибо всем вам! –

+0

вы проверили? – Venkat

ответ

0

Делай так, В .h

CGSize dragViewSize; 

затем,

-(IBAction)buttonDidDragged:(UIPanGestureRecognizer*)gesture 
{ 
    CGPoint translation = [gesture translationInView:self.view]; 

    if (gesture.state == UIGestureRecognizerStateBegan) { 

     dragViewSize = gesture.view.frame.size; 

    } else if (gesture.state == UIGestureRecognizerStateChanged) { 

     CGRect _rect = gesture.view.frame; 
     _rect.size.width=dragViewSize.width+translation.x; 
     gesture.view.frame = _rect; 

    } 
    else if (gesture.state == UIGestureRecognizerStateEnded) { 

    } 
} 

Сво работает отлично ... надеюсь, что это будет поможет вам. ..

1

Приятная идея! Да, это возможно. Вы можете иметь три изображения: слева, справа и в центре, а центр - всего один пиксель.

Вы можете отрегулировать изображение в touchesMoved. Там вы можете рассчитать необходимую ширину растяжки в зависимости от местоположения касания.

Растяжение довольно легко с помощью методов, как

[UIImage stretchableImageWithLeftCapWidth: topCapHeight]

(UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets 
          resizingMode:(UIImageResizingMode)resizingMode 
+0

Благодарим человека, позвольте мне проверить, работает ли он;) –

+0

Как в стороне, используя метод '[[UIImage imageNamed: @" "] resizableImageWithCapInsets: UIEdgeInsetsMake (topEdge, leftEdge, bottomEdge, rightEdge)];' дает еще больший контроль о том, как вы можете растянуть изображение. – msgambel

+0

@YossiTsafar: '- (UIImage *) stretchableImageWithLeftCapWidth: (NSInteger) leftCapWidth topCapHeight: (NSInteger) topCapHeight' устарел. Поэтому нецелесообразно использовать это. Как @msgambel предлагает, нужна ли вам поддержка iOS 5 или использовать '- (UIImage *) resizableImageWithCapInsets: (UIEdgeInsets) capInsets resizingMode: (UIImageResizingMode) resizingMode' для iOS 6+ – mbogh

0

Как я уже писал в комментарии к Mundi метод - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight является устаревшим, и поэтому не стоит использовать его в любой новой разработке.

Вы должны поэтому в соответствии с предложением @msgambel перейти на - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets для совместимости с iOS 5+ или даже лучше - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode для совместимости с iOS 6+.

Никогда не используйте устаревший метод :)

+0

Спасибо, я это знаю. –

0

Наконец, это то, что я сделал, и это работает d просто отлично. Большое вам спасибо!

CGPoint translation = [gesture translationInView:self.view]; 
UIButton *button = (UIButton*)gesture.view; 

if (translation.x < kTranslationMaximum && translation.x > kTranslationMinimum) 
{ 
    self.aboutCenterImage.frame = CGRectMake(self.aboutCenterImage.frame.origin.x, 
    self.aboutCenterImage.frame.origin.y, 
    translation.x, 
    self.aboutCenterImage.frame.size.height); 

    gesture.view.frame = CGRectMake(self.aboutCenterImage.frame.origin.x + self.aboutCenterImage.frame.size.width, 
    self.aboutCenterImage.frame.origin.y, 
    self.buttonAbout.frame.size.width, 
    self.aboutCenterImage.frame.size.height); 
} 
else if (translation.x > kTranslationMaximum) 
{ 
    // Push ViewController or do whatever you like to do :) 
} 
Смежные вопросы