Swann strikes after Cook set up imposing target but bad weather is a factor on final day with the visitors four wickets away from series defeat.
Weather puts England's party on hold in second Test as Kiwis falter
Swann claimed four wickets as the Kiwis slipped to 158 for six in the fourth innings, 310 short of an unfeasible winning target when bad light at Headingley forced the players off nearly 30 minutes early.
Captain Alastair Cook had earlier scored 130, his 25th Test century, but he will be sweating over the mixed forecasts after he delayed England's declaration until their lead was a hugely conservative 468.
Jonathan Trott made 76 in England's eventual 287 for five, while Ross Taylor fought hard with 70 classy runs for New Zealand before becoming Swann's final victim of the day.
England began the morning on 116 for one, with Cook on 88 and Trott on 11 - the latter having entirely stagnated on the third evening. But with quick runs needed and Trent Boult off the field with a side strain, it was clear that would not continue.
A total of 41 runs were added in the first 10 overs, during which time Cook brought up an effortless century with a driven four off Tim Southee.
Trott was happy enough to take risks, finding the boundary with increased regularity but keeping the close catchers interested.
The 100 partnership and Trott's half-century followed before Kane Williamson gave New Zealand something to cheer.
After 190 balls and 18 boundaries Cook was gone for 130, lobbing a catch to mid-off.
Ian Bell came and went cheaply, attempting to attack Williamson, leaving Joe Root and then Jonny Bairstow to provide the entertainment alongside Trott.