Moving an UI element from point A to point B

I wrote this line of code inside the coroutine:

float posX = imageRecticle.GetComponent<RectTransform>().anchoredPosition.x;
float posY = imageRecticle.GetComponent<RectTransform>().anchoredPosition.y;
while(true)
{
    if (posX <= 250.0f)
    {
        posX += 300.0f * Time.deltaTime;
        imageRecticle.GetComponent<RectTransform>().anchoredPosition = new Vector2(posX, posY);
    }
    else
        imageRecticle.GetComponent<RectTransform>().anchoredPosition = new Vector2(250.0f, posY);

    if (posY >= -115.0f)
    {
        posY -= 300.0f * Time.deltaTime;
        imageRecticle.GetComponent<RectTransform>().anchoredPosition = new Vector2(posX, posY);
    }
    else
        imageRecticle.GetComponent<RectTransform>().anchoredPosition = new Vector2(posX, -115.0f);
    

    if (posX >= 250.0f && posY <= -115.0f)
        break;

    yield return 0;
}

It just moves an UI element (imageRecticle) smoothly, from one Vec2 point to another. While it does work, I cannot write it as its own coroutine, due to sign changes and all. Thus, I tried to rewrite this in a more intuitive way:

Vector2 recticleStartPos = imageRecticle.GetComponent<RectTransform>().anchoredPosition;
Vector2 recticleEndPos = new Vector2(250.0f, -115.0f);
while(imageRecticle.GetComponent<RectTransform>().anchoredPosition != recticleEndPos)
{
    imageRecticle.GetComponent<RectTransform>().anchoredPosition = Vector2.MoveTowards(
        recticleStartPos,
        recticleEndPos,
        3.0f * Time.deltaTime);
    yield return 0;
}

But this doesn’t work at all and I can’t figure it out why. Strangely, none of the answers about MoveTowards that I googled, helps me. I also tried using Vector2.Lerp, but no success either.

inside the while loop, try adding:

recticleStartPos = imageRecticle.GetComponent<RectTransform>().anchoredPosition;

or remove that variable entirely to get:

while(imageRecticle.GetComponent<RectTransform>().anchoredPosition != recticleEndPos)
 {
     imageRecticle.GetComponent<RectTransform>().anchoredPosition = Vector2.MoveTowards(
         imageRecticle.GetComponent<RectTransform>().anchoredPosition,
         recticleEndPos,
         3.0f * Time.deltaTime);
     yield return 0;
 }